描述
利用字符重复出现的次数,编写一种方法,最多可以先删掉k个字符,再实现字符串压缩,返回压缩过后字符串的最小长度。比如,字符串aabcccccaaa,k=0时,会压缩变为a2bc5a3,返回7。
1.如果只有一个字符,1不用写
2.新增一个先删除k个字符的处理,也可以不删除,也可以删除少于k个字符,要达到压缩过后字符串的长度为最小
3.字符串中只包含大小写英文字母(a至z)
数据范围:
0<=字符串长度<=100
0<=k<=字符串长度
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串
# @param k int整型
# @return int整型
#
inputa = "aaabbbaaa"
k = 3
class Solution:
def compressString(self , s: str, k: int) -> int:
# write code here
s_dict = {}
s_dict_all = {}
s_list = []
left = 0
right = 0
word_dict = {}
for i in s:
word_dict[i] = word_dict.get(i, 0) + 1
for ke, va in word_dict.items():
if va == k:
s = s.replace(ke,'')
while True:
if s[left] == s[right]:
if s_dict.get(s[left]) is None:
s_dict[s[left]] = 0
s_dict[s[left]] += 1
right += 1
else:
if s_dict.get(s[left]) == 1:
s_list.append(str(s[left]))
else:
s_list.append(str(s[left]) + str(s_dict.get(s[left])))
s_dict = {}
left = right
if right == len(s):
s_list.append(str(s[left]) + str(s_dict.get(s[left])))
# if str(k) in s_list:
return len(''.join(s_list))
solu = Solution()
solu.compressString(inputa, k)
自测输入三个结果都是没有问题的,但是对于随即删除k个字母导致长度最短的情况还没有完全搞清楚,有没有大佬看见帮助解答一下