其他分享
首页 > 其他分享> > B. Dorms War_双指针

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