题目链接:https://leetcode.com/problems/longest-palindromic-substring/
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
思路:本题用到了一个中心法求回文数的算法。
要求一个字符串的最大回文数,最暴力的方法是穷举所有可能,即枚举[1, len]长度的子串,判断是否回文。这种方法的时间复杂度是O(n^3)。因此不可能通过测试集。
使用中心法求回文数的思路是借助两个指针,以一个字符为中心,或者以两个字符之间为中心向左右扫描,判断是否相等。如果即可将时间复杂度降为O(n^2)。
代码如下:
class Solution { public: string longestPalindrome(string s) { int len = s.size(); if(len == 0) return 0; int index, maxLen = 0, i=0, left, right; while(i < 2*len -1) { left = i/2;//i为奇数代表以两个字符之间的间隔为中心,为偶数代表以一个字符为中心 right = i%2==1?(i/2 +1):i/2; while(left >= 0 && right < len) { if(s[left] == s[right]) { if(right - left +1 > maxLen)//更新最大长度及起始位置 { maxLen = right - left +1; index = left; } left--; right++; } else break; } i++; } return s.substr(index, maxLen); } };