今天是第365天写每日
一年了 有够快
2516. Take K of Each Character From Left and Right
有一个长度为n的字串s是由a、b、c组成的
每一分钟可以从最左边或是最右边拿走一个字母
请问最少要几分钟才可以每个字母最少拿到k个?
思路 :
就sliding window + hash table
先假设L=0、R=n
将L往右拿字母一直到满足题目要求的条件
接着开始将L往左
只要L往左后没有满足条件
就将R往左一直到重新满足条件
中间就一直维护最短长度就好
这样就可以得到答案了
golang code :
func takeCharacters(s string, k int) int {
if k==0{
return 0
}
n, l, cnt, rec := len(s), 0, 0, [3]int{}
r := n
for l < n {
idx := int(s[l] - 'a')
rec[idx]++
if rec[idx] == k {
cnt++
}
if cnt == 3 {
break
}
l++
}
if l == n {
return -1
}
ans := l + 1
for l > -1 {
idx := int(s[l] - 'a')
rec[idx]