蓝桥杯每日一练

【问题描述】

小蓝制作了 n 个工件,每个工件用一个由小写英文字母组成的,长度为 2 的字符串表示,第 i 个工件表示为 si 。小蓝想把 n 个工件拼接到一起,方便转 移到另一个地方完成下一道工序,而拼接后的工件用字符串 S = s1 + s2 +...+ sn 表示,其中 + 表示一种奇特的拼接方式:对于 c = a + b 来说,如果 a 的第二 个字符和 b 的第一个字符相同,则拼接后的结果 c 长度为 3 而不是 4 ,中间相 同的字符可以省略一个,比如 xy + yz = xyz 而 xy + zy = xyzy 。小蓝为了让拼 接后的字符串 S 的长度尽量小,可以将若干个工件进行左右翻转之后再进行拼 接,请问拼接后的字符串 S 的最小长度是多少?

请注意所有工件必须按出现顺序依次拼接,可以翻转任意工件。

【输入格式】

输入的第一行包含一个正整数 n 。

接下来 n 行,每行包含一个长度为 2 字符串,依次表示 s1, s2, · · · , sn 。

【输出格式】

输出一行,包含一个整数表示答案。

【样例】

|------------|----|-----------------------------|
| 输入 | 输出 | 说明 |
| 3 ab cb zz | 5 | 将 s2 翻转后,拼接结果为 abczz ,长度为 5 |
| 3 ab bc cd | 4 | 顺序拼接,长度为4 |

【代码及解析】

python 复制代码
n = int(input())  # 获取查询的数量

# 获取输入的字符串列表
s = [input() for _ in range(n)]

# 处理字符串列表
for i in range(1, n):
    # 如果前一个字符串的第一个字符在下一个字符串中,则反转前一个字符串
    if s[i-1][0] in s[i]:
        s[i-1] = s[i-1][::-1]
    
    # 如果当前字符串的第二个字符与前一个字符串的第二个字符相同,则反转当前字符串
    if s[i][1] == s[i-1][1]:
        s[i] = s[i][::-1]

# 初始化结果字符串,从列表中移除第一个字符串并将其赋值给结果字符串
res = s.pop(0)

# 遍历处理后的字符串列表,构建最长的字符串组合
for x in s:
    # 如果结果字符串的最后一个字符与当前字符串的第一个字符相同,则将当前字符串的第二个字符添加到结果字符串
    # 否则,将当前字符串添加到结果字符串
    res += x[1] if res[-1] == x[0] else x

# 输出最长字符串组合的长度
print(len(res))
相关推荐
YHHLAI8 分钟前
LeetCode 1.两数之和 | 从暴力枚举到线性优化
算法·leetcode·职场和发展
Urbano9 分钟前
工装标准缝纫流程及自动化升级提质增产方案
大数据·人工智能·算法
KaMeidebaby37 分钟前
卡梅德生物技术快报|biotin 生物素标记抗体全流程
前端·人工智能·算法·数据挖掘·数据分析
阳明山水42 分钟前
自下而上 vs 自上而下 vs 最优组合预测策略解析
大数据·人工智能·深度学习·算法·机器学习
keykey6.44 分钟前
从逻辑回归到 SVM:不仅仅是“分开“
算法·机器学习·支持向量机
QN1幻化引擎1 小时前
RingBuffer:用"循环缓冲区"干掉KV Cache的O(n)显存膨胀
算法·github
papership1 小时前
【入门级-算法-8、图论算法:泛洪算法 (Flood Fill)】
算法·图论
MartinYeung51 小时前
[论文学习]LLM 情境学习资料的快速精确遗忘技术:基于 In-Context Learning 与量化 K-Means 的 ERASE 方法
学习·算法·kmeans
林森lsjs1 小时前
【日耕一题】5. 青春常数(17届蓝桥杯C++B组第一题)
算法·蓝桥杯
Tisfy1 小时前
LeetCode 3838.带权单词映射:求和、取模、拼接(附python一行版)
python·算法·leetcode·字符串·题解·模拟·取模