题目描述
给定一个串,如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个字符串
输出
n个最长的真前后缀,若不存在最长的真前后缀则输出empty。
样例输入
6 a ab abc abcd abcda abcdab
样例输出
empty empty empty empty a ab
提示
#include<iostream> #include<string> #include<algorithm> using namespace std; string matched_Prefix_Postfix(string s) { int slength=s.size(); string before[slength-1]; string after[slength-1]; for(int i=0;i<slength-1;i++) { before[i]=s.substr(0,i); } reverse(s.begin(),s.end()); for(int i=0;i<slength-1;i++) { after[i]=s.substr(0,i); reverse(after[i].begin(),after[i].end()); } reverse(s.begin(),s.end()); int Max=0; int index=-1; for(int i=0;i<slength-1;i++) { for(int j=0;j<slength-1;j++) { if(before[i]==after[j]) { int t=after[i].size(); if(t>Max) { index=i; Max=t; } } } } if(Max==0) { string e="empty"; return e; } else { string f=before[index]; return f; } } int main() { int T; cin>>T; while(T--) { string s; cin>>s; cout<<matched_Prefix_Postfix(s)<<endl; } return 0; }
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180767.html
时间: 2024-08-30 10:33:07