(算法-字符串)最长对称子串
2015-10-09 20:21
363 查看
题目:
输入字符串中对称的子字符串的最大长度。比如输入字符串“roorle”,由于该字符串里最长的对称子字符串是“roor”,因此输出4.思路:
1、求字符串”roorle“和反序”elroor“的最长公共子串2、最长回文子串
代码:
1、最长公共子串#include<iostream> using namespace std; // brute force string findLongestPalindrome_1(const string &str){ int length=str.size(); int maxLength=0; int start; for(int i=0;i<length;i++){ for(int j=i+1;j<length;j++){ int left,right; for(left=i,right=j;left<right;left++,right--){ if(str[left]!=str[right]) break; } if(left>=right && (j-i)>maxLength){ maxLength=j-i+1; start=i; } } } if(maxLength>0) return str.substr(start,maxLength); return NULL; } // dynamic programming string findLongestPalindrome_2(string &str){ const int length=str.size(); int maxLength=1; int start; bool dp[length][length]; for(int i=0;i<length;i++) for(int j=0;j<length;j++) dp[i][j]=false; for(int i=0;i<length;i++){ dp[i][i]=true; if(i<length-1 && str[i]==str[i+1]){ dp[i][i+1]=true; start=i; maxLength=2; } } for(int len=3;len<=length;len++){ for(int i=0;i<=length-len;i++){ int j=i+len-1; if(dp[i+1][j-1] && str[i]==str[j]){ dp[i][j]=true; start=i; maxLength=len; } } } if(maxLength>=2) return str.substr(start,maxLength); return NULL; } // pivot expand string findLongestPalindrome_3(string &str){ const int length=str.size(); int maxLength=1; int start; // length is odd for(int i=0;i<length;i++){ int left=i-1; int right=i+1; while(left>=0 && right<=length-1 && str[left]==str[right]){ if(right-left+1>maxLength){ start=left; maxLength=right-left+1; } left--; right++; } } // length is even for(int i=0;i<length;i++){ int left=i; int right=i+1; while(left>=0 && right<=length-1 && str[left]==str[right]){ if(right-left+1>maxLength){ start=left; maxLength=right-left+1; } left--; right++; } } if(maxLength>0) return str.substr(start,maxLength); return NULL; } int main(){ string str="ababcddcbbd"; cout<<findLongestPalindrome_1(str)<<endl; cout<<findLongestPalindrome_2(str)<<endl; cout<<findLongestPalindrome_3(str)<<endl; return 0; }
View Code
相关文章推荐
- [234]Palindrome Linked List
- Day1(Oct 8,2015)
- BZOJ 1355 [Baltic2009]Radio Transmission Hash/KMP
- 练习Link5
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- BestCoder 1st Anniversary ($) HDU5312 Sequence
- BestCoder 1st Anniversary ($) HDU5311 Hidden String
- iOS导航栏,标签视图的透明度处理
- 大数据系列二(1)---时代的印记(互联网,云计算)
- mysql中文存入到数据库乱码
- 归并排序
- CentOS安装VirtualBox增强工具
- Java 的布局管理器GridBagLayout的使用方法【图文说明】
- 笔试怎么过(2)TCP/IP、HTTP、进程/线程、sql
- Android中创建AIDL服务的步骤
- 【NOIP2010】引水入城
- 【NOIP2010】引水入城
- 【转】算法之堆排序
- 李刚OC语言疯狂讲义笔记
- POJ 2965 The Pilots Brothers' refrigerator 枚举dfs