文章

34

粉丝

0

获赞

132

访问

4.2k

头像
字符串替换 KMP+tolower题解:
P2011
发布于2026年3月13日 11:32
阅读数 68

#include<bits/stdc++.h>
using namespace std;

int main()
{
	bool flag = false;
	string s1 = "tantan"; vector<int> moshi(6, 0);
	for(int i = 1; i < 6; i ++){
		int j = moshi[i - 1];
		while(j > 0 && s1[i] != s1[j]) j = moshi[j - 1];
		if(moshi[i] == moshi[j]) j ++;
		moshi[i] = j;
	}
	string s2 = "baibai";
	string s; cin >> s;
	for(int i = 0; i < s.size(); i ++)
	{
		s[i] = tolower(s[i]);
	}
	
	int len = 0;
	for(int i = 0; i < s.size(); i ++)
	{
		while(len > 0 && s[i] != s1[len]) len = moshi[len - 1];
		if(s[i] == s1[len]) len ++;
		//s[i] = len;  //弱智别写这个
		if(len == 6)
		{
			flag = true;
			int start = i - 6 + 1;
			for(int i = 0; i < 6; i ++)
			{
				s[i + start] = s2[i];
			}
			len = 0; //别忘记归0
		}
	}
	
	if(flag) cout << s;
	else cout << "not find";
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发