B. Dorms War_双指针
作者:互联网
B. Dorms War
题目大意:
给一个字符串,和若干个特殊字符。每次操作可以删掉所有特殊字符前面的一个字符。问最多操作几次
思路和代码:
考虑这个例子:axxaxxxxxxaxxa,其中a是特殊字符。不难发现最后的答案就是最长的以特殊字符结尾的区间长度。
这题我一不小心又陷入了奇怪的地方,整理思路后发现遍历左端点去找右端点即可,最坏也就O(2n)。
void solve(){
int n , m ;
string s ;
cin >> n >> s >> m ;
s = " " + s ;
vct<bool> mp(30 , 0) ;
while(m -- ){
char c ;
cin >> c ;
mp[c - 'a'] = 1 ;
}
int ans = 0 ;
rep(i , 2 , n){
if(!mp[s[i] - 'a']) continue ;
int j = i - 1 ;
while(j > 1 && !mp[s[j] - 'a']) j -- ;
ans = max(ans , i - j) ;
}
cout << ans << "\n" ;
}//code_by_tyrii
小结:
在代码实现的时候总会出现卡壳的地方,这种时候要么就是思路不清晰需要整理思路,要么就是代码写得复杂了。
标签:Dorms,int,mp,ans,思路,War,特殊字符,指针 来源: https://www.cnblogs.com/tyriis/p/16240881.html