题目描述
给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB } 因此,该串的真前缀和真后缀中最长的相等串为AB,我们称之为该串的“最长的真前后缀”。试实现一个函数string matched_Prefix_Postfix(string str),得到输入串str的最长的真前后缀。若不存在最长的真前后缀则输出empty
输入
第1行:串的个数 n第2行到第n+1行:n个字符串
输入样例:
6
a
ab
abc
abcd
abcda
abcdab
输出
n个最长的真前后缀,若不存在最长的真前后缀则输出empty。
输出样例:
empty
empty
empty
empty
a
ab
代码
#include <iostream>
using namespace std;
string matched_Prefix_Postfix(string str){
string k,final,res="";
int i = 0, len = str.length();
while(i < len-1){
k += str[i]; //真前缀
final = str[len-i-1] + final; //真后缀
if(k == final && k.length() > res.length()){ //最大
res = k;
}
i++;
}
if(res != ""){
return res;
}else{
return "empty";
}
}
int main()
{
int t;
string s;
cin >> t;
while(t--){
cin >> s;
string res = matched_Prefix_Postfix(s);
cout << res;
if(t != 0){
cout << endl;
}
}
return 0;
}