不相同的字符串 acm模式刷题

题目描述

给定一个只包含小写字母的字符串,每次操作可以将两个相同的字母删除,然后在字符串的末尾新增任意一个小写字母。请问最少需要多少次操作,才能使字符串中所有的字母都不相同。
输入描述

第一行是一个整数 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)
相关推荐
海洲探索-Hydrovo2 小时前
TTP Aether X 天通透传模块丨国产自主可控大数据双向通讯定位模组
网络·人工智能·科技·算法·信息与通信
2401_841495645 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Jonkin-Ma5 小时前
每日算法(1)之单链表
算法
晚风残6 小时前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer
杨云强6 小时前
离散积分,相同表达式数组和公式
算法
地平线开发者6 小时前
征程 6 | BPU trace 简介与实操
算法·自动驾驶
满天星83035776 小时前
【C++】AVL树的模拟实现
开发语言·c++·算法·stl
Lris-KK7 小时前
力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历
python·算法·leetcode
麦麦鸡腿堡7 小时前
Java的动态绑定机制(重要)
java·开发语言·算法
zy_destiny8 小时前
【工业场景】用YOLOv8实现抽烟识别
人工智能·python·算法·yolo·机器学习·计算机视觉·目标跟踪