最长回文子串 【朴素算法(枚举)】
2017-04-27 01:07
288 查看
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 1000)
Output
输出最长回文子串的长度L。
Sample Input
daabaac
Sample Output
5
思路: 朴素算法 ,我们可以枚举处于中间的数是哪个,对于aba型的,枚举b(可以从第一个位置到最后一个位置) ; 对于abba 可以枚举中间的数是哪个
代码
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 1000)
Output
输出最长回文子串的长度L。
Sample Input
daabaac
Sample Output
5
思路: 朴素算法 ,我们可以枚举处于中间的数是哪个,对于aba型的,枚举b(可以从第一个位置到最后一个位置) ; 对于abba 可以枚举中间的数是哪个
代码
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #define CLR(a,b) memset((a),(b),sizeof(a)) #define inf 0x3f3f3f3f #define mod 100009 #define LL long long #define M 10000 #define ll o<<1 #define rr o<<1|1 #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r using namespace std; char s[M]; int main() { gets(s); //最长回文子串 int len=strlen(s); int i,j;int ans=0; for(i= 4000 0;i<len;i++) // 枚举中间数字的位置 { for(j=1;i+j<len&&i-j>=0&&s[i+j]==s[i-j];j++) ;//aba型 ans=max(ans,2*(j-1)+1); for(j=1;i+j<len&&i-j+1>=0&&s[i+j]==s[i-j+1];j++);//abba型 ans=max(ans,2*(j-1)); } printf("%d\n",ans==1?0:ans); return 0; }
相关文章推荐
- 最长回文子串——Manacher 算法
- Manacher 算法详解:O(n) 复杂度求最长回文子串
- [hdu3068 最长回文]Manacher算法,O(N)求最长回文子串
- 最长回文子串——Manacher 算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 算法——Manacher算法(求最长回文子串)
- KT学算法(三)——最长回文子串与Manacher算法
- 【算法】最长回文子串
- manacher算法--最长回文子串
- 【面试题之算法部分】最长回文子串
- manacher求最长回文子串算法
- 2.求最长无重复字符子串和求最长回文子串的算法
- Manacher算法求最长回文子串
- 编程之法:关于最长回文子串 | Manacher 算法详解
- 实用算法实现-第 8 篇 后缀树和后缀数组 [4 最长回文子串]
- 求最长回文子串算法分析-Manacher算法
- POJ 3974 HDU 3068 最长回文子串 Manacher 算法
- 最长回文子串o(n)算法
- 最长回文子串——Manacher 算法
- (串的模式匹配4.6.1)POJ 3080 Blue Jeans(使用朴素的模式匹配算法求最长的公共子串)