题目描述
给定一个只包含小写字母的字符串,每次操作可以将两个相同的字母删除,然后在字符串的末尾新增任意一个小写字母。请问最少需要多少次操作,才能使字符串中所有的字母都不相同。
输入描述
第一行是一个整数 N,表示后续会有 N 个字符串,每个字符串占一行。
输出描述
对于输入的每一个字符串,你需要输出该字符串所需的最少操作次数,每个输出占一行。
输入示例
1
abab
输出示例
2
解题思路: 1.贪心算法 2.通过构造大小为26的列表,记录字符串中不同字符出现的次数,循环字典,更新出现次数最多的字符的数量和次数出现最少的字符的数量,直至列表中不存在数量大于1,则退出循环。
python
def CountString(strings):
letter_count = [0]*26
for j in strings:
letter_count[ord(j) - 97] += 1
count = 0
while(max(letter_count) > 1):
for x in range(26):
if letter_count[x] > 1:
letter_count[x] -= 2
count += 1
break
min_letter = min(letter_count)
for y in range(26):
if min_letter == letter_count[y]:
letter_count[y] += 1
break
return count
if __name__ == "__main__":
n = input().split()
n = int(n[0])
for i in range(n):
string = input()
num = CountString(string)
print(num)