Ural 1297 Palindrome 【最长回文子串】

时间:2021-02-07 13:08:37

最长回文子串 相关资料:

1、暴力法

2、动态规划

3、中心扩展

4、Manacher法 http://blog.csdn.net/ywhorizen/article/details/6629268

http://blog.csdn.net/kangroger/article/details/37742639

在看后缀数组的时候碰到的这道题目

不过没用后缀数组写出来= = 用了一个很暴力的做法卡进了1 s

Source Code:

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std; string a, res, tmp1, tmp2;
int ans; int main(){
int i, j, k, t, n, m;
while(cin >> a){
ans = 1;
int len = a.size();
bool flag = false;
for(i = 0; i < len; ++i){
if(len - i < ans) break;
for(j = len - i; j >= 1; --j){
tmp1 = a.substr(i, j);
tmp2 = tmp1;
reverse(tmp1.begin(), tmp1.end());a
if(!flag){
if(tmp1.compare(tmp2) == 0 && j >= ans){
flag = true;
res = tmp1;
ans = j;
break;
}
} else{
if(tmp1.compare(tmp2) == 0 && j > ans){
flag = true;
res = tmp1;
ans = j;
break;
}
} }
}
cout << res << endl;
}
return 0;
}

531 ms 是可以过= = 不过大家用后缀数组都是15MS 过的,有点不好意思啊