最长回文字符串

Posted zz1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长回文字符串相关的知识,希望对你有一定的参考价值。

题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

解析:最长回文字符串就是正过来和反过来一样的字符串,比如上海自来水来自海上,小明到操场操到天明。。

方法一:从最暴力的方法入手,直接遍历所有的子字符串

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         //暴力解法
 5         int length = s.length();
 6         int max = 0;
 7         string res = "";
 8         for(int i = 0; i < length; i++){
 9             for(int j = i + 1; j <= length; j++){
10                 string tmp = string(s, i, j - i);
11                 //cout << tmp << endl;
12                 if(isPalindrome(tmp) && tmp.length() > max){
13                     //cout << tmp << endl;
14                     max = tmp.length();
15                     res = tmp;
16                 }
17             }
18         }
19         return res;
20         
21     }
22 
23     bool isPalindrome(string s){
24         for(int i = 0; i < s.length() / 2; i++){
25             if(s[i] != s[s.length() - i - 1]){
26                 return false;
27             }
28         }
29         return true;
30     }
31 };

分析:遍历子字符串需要n(n - 1)/2,复杂度为O(n^2),每次判断是否为回文字符串的复杂度为O(n),所以,此算法复杂度为O(n^3);

 

以上是关于最长回文字符串的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门经典 例题 3-4 回文串

CSDN|每日一练最长回文串

CSDN|每日一练最长回文串

华为机试题 HJ85最长回文子串

华为机试题 HJ85最长回文子串

最长回文子串