【LeetCode】647. 回文子串 [C++]
【题目描述】
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
【思路】
计算有多少个回文子串的最朴素方法就是枚举出所有的回文子串,而枚举出所有的回文字串又有两种思路,分别是:
1.枚举出所有的子串,然后再判断这些子串是否是回文;
2.枚举每一个可能的回文中心,然后用两个指针分别向左右两边拓展,当两个指针指向的元素相同的时候就拓展,否则停止拓展。
【代码】
class Solution {
public:
int countSubstrings(string s) {
int n=s.size();
int l,r,ans=0;
for(int i=0;i<2*n-1;++i)
{
l=i/2,r=l+(i&1);
while(l+1&&n-r&&s[l]==s[r])
{
++ans;
--l;
++r;
}
}
return ans;
}
};

浙公网安备 33010602011771号