Blue Jeans POJ

string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)


#include<iostream>
#include<cstdio>
#include<cstring>
#include<string> 
#define N 101
#define LL long long
using namespace std;
string str[N];
int main() {
	int t;
	scanf("%d",&t);
	while(t--) {
		int m;
		scanf("%d",&m);
		for(int i=1; i<=m; i++)
			cin>>str[i];
		string res="no significant commonalities";
		for(int len=3; len<=60; len++) {//枚举长度
			for(int i=0; i<=60-len; i++) { //枚举初始位置
				string temp=str[1].substr(i,len);//构造子串
				bool flag=true;
				for(int j=2; j<=m; j++) {//枚举剩下的m-1个字符串
				 	//判断是否存在子串,如果没有找到 
					if(str[j].find(temp)==string::npos) {
						//标记没有找到 
						flag=false;
						break;
					}
				}
				//如果没有找到,继续往下找 
				if(!flag)
					continue;
				else {
					if(res=="no significant commonalities")
						res=temp;
					else if(res.size()<temp.size())
						res=temp;
					else if(res.size()==temp.size())
						res=min(res,temp);
				}
			}
		}
		cout<<res<<endl;

	}
	return 0;
}
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12383840.html