[LeetCode]Longest Palindromic Substring

题意:最长回文子串。

原题来自:https://leetcode.com/problems/longest-palindromic-substring/

分析:

有2种解法,字符串解析(KMP算法,我忘了),还有一种,直接用动态规划搞定。

不晓得动态规划方法的朋友,自己百度学下这方法,该方法用处很多。

至于KMP是麻烦且不是最好的方法,字符串匹配的算法有 BF > KMP > BM(好像微软的记事本就是用的这个来搜索)(时间复杂度从大到小排序)。

 

动态规范方法:

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int n = s.length();  
 5         int longestBegin = 0;  
 6         int maxLen = 1;  
 7         bool table[1000][1000] = {false};  
 8         for (int i = 0; i < n; i++)  
 9             table[i][i] = true;  
10         for (int i = 0; i < n-1; i++)  
11             if (s[i] == s[i+1]) {  
12                 table[i][i+1] = true;  
13                 longestBegin = i;  
14                 maxLen = 2;  
15             }
16         for (int len = 3; len <= n; len++) {  
17             for (int i = 0; i < n-len+1; i++) {  
18                 int j = i+len-1;  
19                 if (s[i] == s[j] && table[i+1][j-1]) {  
20                     table[i][j] = true;  
21                     longestBegin = i;  
22                     maxLen = len;  
23                 }
24             }
25         }  
26         return s.substr(longestBegin, maxLen);  
27     }
28 };

 

 

作者:orange1438
出处:http://www.cnblogs.com/orange1438/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

你可能感兴趣的:(substring)