*****(leetcode_string)Longest Palindromic Substring
来源:互联网 发布:电子相册在线制作软件 编辑:程序博客网 时间:2024/04/27 22:31
Longest Palindromic Substring
Total Accepted: 29287 Total Submissions: 141909My SubmissionsGiven a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
StringHave you met this question in a real interview?
Yes
No
Discuss
1、动态规划:用二维数组来标记,flag[i][j]表示i~j之间的字符串是否为回文,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为判断 i~j=i+1的时候,s[i]==s[j]的话要根据i++~j--的flag值判断,即baa中判断aa这两个字符的时候 。 程序中
flag[i][j]=flag[i+1][j-1];
如果i>j时不设置true,就需要在程序中判断i>j的情况。
比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。
接着比较s[i] ?= s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false
class Solution { public: string longestPalindrome(string s) { int i,j,len = s.length(),l=0,r=0,max=1; bool flag[len][len]; for(i=0;i<len;i++) for(j=0;j<len;j++) if(i>=j) flag[i][j]=true; else flag[i][j]=false; for(j=1;j<len;j++){ for(i=0;i<j;i++){ if(s[i]==s[j]){ flag[i][j]=flag[i+1][j-1]; if(flag[i][j] && max<j-i+1){ max=j-i+1; l=i; r=j; } } else flag[i][j]=false; } } return s.substr(l,max); }};
2、中心扩散法:要注意奇数偶数个回文字符串。
class Solution {public: string findPal(string &s, int left, int right) { if (left < 0) return s.substr(left+1, 1); if (right >= s.size()) return s.substr(right-1, 1); while(0 <= left && right < s.size()) { if (s[left] != s[right]) break; left--; right++; } left++; right--; return s.substr(left, right - left + 1); } string longestPalindrome(string s) { if (s.size() == 0) return ""; string ret; for(int i = 0; i < s.size(); i++) { string str = findPal(s, i - 1, i + 1);//奇数,以i为中心向两边扩散 if (str.size() > ret.size()) ret = str; str = findPal(s, i, i + 1);//偶数,以i和i+1为中心向两边扩散 if (str.size() > ret.size()) ret = str; } return ret; }};
0 0
- *****(leetcode_string)Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- Longest Palindromic substring
- [LeetCode] Longest Palindromic Substring
- LeetCode5:Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Socket 网络编程
- Android Studio系列教程四--Gradle基
- OpenCV学习(十四)之彩色图像RGB通道的分离、合并与显示
- C#中Abstract和Virtual使用
- Ubuntu编译Android源码之安装JDK
- *****(leetcode_string)Longest Palindromic Substring
- Linux时间同步
- C++ Primer(泛型算法)
- Process进程、Thread线程
- github简单使用教程
- 创业概念:路演
- Android intent
- 关于重要性采样(Importance Sampling)
- 编译Android下的ffmpeg 1.2