「水」悠悠碧波
「水」悠悠碧波
https://ac.nowcoder.com/acm/problem/53679
题目
给定字符串 s,求一个最长的字符串 t,t 满足以下条件:
它是 s 的前缀;
它是 s 的后缀;
除前缀和后缀外,它还在 s 中出现过至少一次。
解题思路
暴力求解:先判断前缀和后缀,再判断中间是否存在该字符串。
C++代码
#include<iostream>
using namespace std;
int main(){
string s;
cin >> s;
int n = s.size();
int i = (n-1)/3;
for(; i>=0; --i){
int a = i;
int b = n-1;
bool flag = true;
while(a>=0){
if(s[a] != s[b]){
flag = false;
break;
}
--a;
--b;
}
if(!flag)
continue;
int m = n - 2*(i+1);
for(int k=i+1; k<m; ++k){
int c = k;
a = 0;
while(a<=i){
if(s[a]!=s[c]){
break;
}
++a;
++c;
}
if(a>i){
cout << s.substr(0, i+1) << endl;
return 0;
}
}
}
return 0;
}
查看29道真题和解析