題目
給定一個字符串,只包含大寫字母,求在包含同一字母的子串中,長度第k長的子串的長度,相同字母只取最長的那個子串。
輸入描述:
第一行輸入一個子串(長【1,100】),只包含大寫字母;
第二行為k的值;
輸出描述:
輸出連續出現次數第k多的字母的次數;
示例1
輸入:
AAAAHHHBBCDHHHH
3
輸出:
2
說明:同一個字母連續出現最多的是A和H,4次;
第二多的是H,3次(H已在4次中計算過,故忽略);第三多的是BB; 故輸出2;
示例2
輸入:
AABAAA
2
輸出:
1
?
解題代碼
思路:
- 基于雙指針,統計連續字母出現的次數,字母為key,出現次數為value;
- 相同的字母串存入字典時,值取最大的;
- 按照連續字母出現次數降序排序;
s = input().strip()
k = int(input().strip())
stats_dict = {}
pre = cur = 0
count = 0
while cur < len(s):if s[cur] == s[pre]:count += 1cur += 1else:# 存入字典if s[pre] not in stats_dict: # 不在 則直接存stats_dict[s[pre]] = countelse: # 在則存最大值stats_dict[s[pre]] = max(stats_dict.get(s[pre]), count)pre = curcount = 0# 最后的存入
if s[pre] not in stats_dict:stats_dict[s[pre]] = count
else:stats_dict[s[pre]] = max(stats_dict.get(s[pre]), count)# 對字典的key 按照字母出現次數降序排序
result = list(stats_dict.items())
result.sort(key=lambda e: e[1], reverse=True)
print(result[k-1][1])