[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/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。