H: 何总的字符串

何总的字符串

在这里插入图片描述

题意:就是给定一个字符串找出它的子串是否满足给定的三个条件,输出满足条件的最长子串。

解题思路:既然是要前缀,也是要后缀同时也要不是前缀也不是后缀与前后缀不重合,那么我们可以将字符串分为三份,先三等分,判断第一部分是否等于第二部分,接下来再判断中间部分是否包含第一部分。满足则退出,不满足继续分,按照下面的方式来分:
核心

for(int i=j;i>0;i--)
	{
		string a(s,0,i),b(s,i,len-2*i),c(s,len-i,i);
		if(a==c)
		{
			if(b.find(a)!=b.npos)//判断是否包含前缀。
			{
				cout<<a<<endl;
				break;
			}
		}
	}

完整AC代码:

#include<iostream>
#include<string>
#include<queue>
#include<stack>
#include<algorithm>
#include<cstdlib>

using namespace std;

void solve()
{
	string s;
	cin>>s;
	int len=s.length();
	int j=len/3;
	for(int i=j;i>0;i--)
	{
		string a(s,0,i),b(s,i,len-2*i),c(s,len-i,i);
		if(a==c)
		{
			if(b.find(a)!=b.npos)//判断是否包含前缀。
			{
				cout<<a<<endl;
				break;
			}
		}
	}
}
int main()
{
	solve();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hzf0701/article/details/107536738