作者:
JIWP (JIWP)
2024-11-20 21:59:09今天是第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]