问题描述:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
分析:需要以每一个字母开始去遍历寻找与随后的字母是否构成回文:
1、构成回文,则判断长度是否比之前的会问长度更长:1)若比之前的回文长度更长,将该回文做为最长回文。
· 2)若比之前的回文短或者等长,最长回文位置不做改变;
2、不构成回文,继续下一个字母与其后面的字母的比较。
源代码:
string longestPalindrome(string s){ int length = s.length();//字符串长度 int maxright = 0,maxLeft = 0;//用来记录最长回文的长度,初始化为0 if (length < 2)//长度为1或为空时返回字符串本身 return s; else{ int left = 0; int right = length - 1; while (left < length -1){//从左到右依次遍历 while (left < right){//依次判断该字母与后面的字母是否构成回文 int j = left; int k = right; while (j < k && s.at(j)==s.at(k)){//判断后面的字母是否构成回文 j++; k--; } if (j + 1 == k || j == k){//判断是否为回文 if ((right - left) > (maxright - maxLeft)){//判断是否为最长回文 maxright = right; maxLeft = left; } } right--; } left++; } return s.substr(maxLeft, maxright - maxLeft);//返回最长回文 } }