1898. 可移除字符的最大数目
最后更新于
最后更新于
输入:s = "abcacb", p = "ab", removable = [3,1,0]
输出:2
解释:在移除下标 3 和 1 对应的字符后,"abcacb" 变成 "accb" 。
"ab" 是 "accb" 的一个子序列。
如果移除下标 3、1 和 0 对应的字符后,"abcacb" 变成 "ccb" ,那么 "ab" 就不再是 s 的一个子序列。
因此,最大的 k 是 2 。输入:s = "abcbddddd", p = "abcd", removable = [3,2,1,4,5,6]
输出:1
解释:在移除下标 3 对应的字符后,"abcbddddd" 变成 "abcddddd" 。
"abcd" 是 "abcddddd" 的一个子序列。输入:s = "abcab", p = "abc", removable = [0,1,2,3,4]
输出:0
解释:如果移除数组 removable 的第一个下标,"abc" 就不再是 s 的一个子序列。func maximumRemovals(s string, p string, removable []int) int {
check := func(k int) bool {
removed := make([]bool, len(s))
for i := 0; i < k; i++ {
removed[removable[i]] = true
}
j := 0
for i := 0; i < len(s) && j < len(p); i++ {
if !removed[i] && s[i] == p[j] {
j++
}
}
return j == len(p)
}
l, r := 0, len(removable)
for l < r {
m := l + ( r -l + 1) >> 1
if check(m) {
l = m
} else {
r = m - 1
}
}
return l
}