首页 > 试题广场 >

小红的双生串

[编程题]小红的双生串
  • 热度指数:3995 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红定义一个字符串是双生串,当且仅当其前半部分所有字符相同,后半部分所有字符相同。
\hspace{15pt}现在,小红拿到了一个字符串 s ,她每次操作可以修改一个字符。小红希望你求出将其修改为双生串的最小修改次数。

输入描述:
\hspace{15pt}在一行上输入一个长度为 1 \leqq {\rm len}(s) \leqq 2 \times 10^5 且为偶数,仅由小写字母构成的字符串 s,代表待修改的字符串。


输出描述:
\hspace{15pt}输出一个整数,表示将 s 修改为双生串的最小修改次数。
示例1

输入

popipa

输出

3

说明

\hspace{15pt}在这个样例中,将 s 修改为 \texttt{ 是其中一个最优解。
示例2

输入

aaaa

输出

0

说明

\hspace{15pt}在这个样例中,给定的字符串已经是双生串,不需要修改。
s = input().strip()
k = len(s)//2
s1 = s[:k]
s2 = s[k:]
strs = "abcdefghijklmnopqrstuvwxyz"
lst1 = []
lst2 = []
for ele in strs:
    lst1.append(s1.count(ele))
    lst2.append(s2.count(ele))

m = k - max(lst1) + k - max(lst2)
print(m)
发表于 2025-07-19 17:29:00 回复(0)
s = input()
n = int(len(s)/2)
s1 = s[:n]
s2 = s[n:]
x  = set(s1)
y  = set(s2)
max1= max([s1.count(i) for i in x])
max2= max([s2.count(j) for j in y])
p = (n-max1) + (n-max2)
print(p)

发表于 2025-06-09 11:37:34 回复(0)
from collections import Counter
s = input()
s_len = len(s)
left_half_counter = Counter(s[:s_len // 2])
right_half_counter = Counter(s[s_len // 2:])

# 左边
left_edit_times = s_len // 2 - left_half_counter.most_common(1)[0][1]
right_edit_times = s_len // 2 - right_half_counter.most_common(1)[0][1]

print(left_edit_times + right_edit_times)

发表于 2025-04-16 14:48:47 回复(0)
粗暴解决:
from typing import Counter
s=input().strip()
k=len(s)//2
qian=s[:k]
hou=s[k:]
qianji=Counter(qian)
maxqian=max(qianji.values())
houji=Counter(hou)
maxhou=max(houji.values())
qianjieguo=int(len(qian))-int(maxqian)
houjieguo=int(len(hou))-int(maxhou)
print(qianjieguo+houjieguo)
发表于 2025-03-18 17:27:44 回复(0)