题目
给你一个字符串 s ,请你统计并返回这个字符串中回文子串的数目。
回文字符串:是正着读和倒过来读一样的字符串。
子字符串: 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”
示例 2:
输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”
思路: 试着找出回文字符串的中心点, 奇数长度的中心点有一个; 偶数长度的中心点有两个。可以从中间向两边寻求最长的回文子串
代码:
class Solution {
public:
int num = 0;
int count(string &s, int start, int end){
// 防止越界, 以及回文的判断
while(start >= 0 && end < s.length() && s[start] == s[end]){
num++;
start--;// 范围向两边扩大
end++;
}
}
int countSubstrings(string s) {
int len = s.length();
for(int i = 0;i<len;i++){
count(s, i, i); // 奇数长
count(s, i, i+1); // 偶数长
}
return num;
}
};
如果有什么问题或者想说的, 欢迎大家在下方评论区留下你的发言。谢谢大家~~