题解 | 至少有 K 个重复字符的最长子串
至少有 K 个重复字符的最长子串
https://www.nowcoder.com/practice/5aabbcfc45e2443ab7b8c9988bca6616
package main
import (
"strings"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param k int整型
* @return int整型
*/
func longestSubstring( s string , k int ) int {
counter := make(map[rune]int, len(s))
for _,c := range s{
counter[c]++
}
for _,c:=range s{
if counter[c]<k{
maxCount := -1
for _,newS := range strings.Split(s,string(c)){
count := longestSubstring(newS, k)
if count>maxCount{
maxCount = count
}
}
return maxCount
}
}
return len(s)
}
这题最难的地方在题意的理解上,子串是连续的字符的意思,而字符的构成可能并不是连续的,比如ababa k为2的话应该是5,k为3的话应该是0.所以按照不满足k的字符作为分隔符去分割就好了,然后看子串是否需要再次分割
1.统计当前不满足k的字符有哪些
2.按照第一个不满足的字符进行分割
3.重复1直到当前的子串中全是大于等于k的字符