最长回文字符串
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);
以上是关于最长回文字符串的主要内容,如果未能解决你的问题,请参考以下文章