链接
https://leetcode-cn.com/problems/palindromic-substrings/
耗时
解题:1 h 22 min
题解:8 min
题意
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
思路
从头到尾遍历字符串,以每个字符为中心向两边找,看两边的字符是否相等,相等即找到一个以当前字符和两边的所有字符组成的回文子串,直到两边的字符不相等。然后如果当前字符和左边的字符相等,还可以将这个两个字符作为中心向两边扩展找回文子串,具体见代码。
时间复杂度: O ( n 2 ) O(n^2) O(n2) ,n 是字符串的长度
AC代码
class Solution {
public:
int countSubstrings(string s) {
if(s.empty()) return 0;
int n = s.size();
int ans = 1;
for(int i = 1; i < n; ++i) {
ans += 1;
int l = i-1, r = i+1;
while(l >= 0 && r < n) {
if(s[l] == s[r]) ans++;
else break;
l--;
r++;
}
if(s[i-1] == s[i]) {
ans++;
l = i-2, r = i+1;
while(l >= 0 && r < n) {
if(s[l] == s[r]) ans++;
else break;
l--;
r++;
}
}
}
return ans;
}
};