回文子串(中心扩展)
最长回文子串
思路:中心扩展法
class Solution {
public:
pair<int,int> centralPoint(string&s,int left,int right)
{
while(left>=0&&right<s.size()&&s[left]==s[right]){
left--;
right++;
}
return {left+1,right-1};
}
string longestPalindrome(string s) {
pair<int,int> StartAndEnd{0,0};
string res;
for(int i=0;i<s.size();i++)
{
pair<int,int> tmp1=centralPoint(s,i,i);
pair<int,int> tmp2=centralPoint(s,i,i+1);
if(StartAndEnd.second-StartAndEnd.first<tmp1.second-tmp1.first)
StartAndEnd=tmp1;
if(StartAndEnd.second-StartAndEnd.first<tmp2.second-tmp2.first)
StartAndEnd=tmp2;
}
for(int i=StartAndEnd.first;i<=StartAndEnd.second;++i)
res.push_back(s[i]);
return res;
}
};
class Solution {
int counter=0;
public:
void centralPoint(string&s,int left,int right)
{
while(left>=0&&right<s.size()&&s[left]==s[right]){
left--;
right++;
counter++;
}
}
int countSubstrings(string s) {
for(int i=0;i<s.size();i++)
{
centralPoint(s,i,i);
centralPoint(s,i,i+1);
}
return counter;
}
};
时间复杂度:O(n^2)
空间复杂度:O(n)

浙公网安备 33010602011771号