647. 回文子串
——————————————————————————————————————————
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: “abc”
输出: 3
解释: 三个回文子串: “a”, “b”, “c”.
示例 2:
输入: “aaa”
输出: 6
说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.
注意:输入的字符串长度不会超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindromic-substrings
——————————————————————————————————————————
1、遍历法
从第一个点开始遍历,以一个点为中心,同时向左和向右进行比较,如果相等,则回文子串个数+1。另一种情况是以两个点为中心,然后同时向左和向右进行比较,如果相等,则回文子串个数+1。具体的C++代码如下:
class Solution {
public:
int countSubstrings(string s) {
int length = s.size();
int num=0;
for(int i=0;i<length;i++)
{
int j=i; #以一个点为中心进行比较
int k=i;
while((j>=0) && (k<length) && (s[j]==s[k]))
{
num = num + 1;
j--;
k++;
}
}
for(int i=0;i<length;i++)
{
int j=i; #以两个点为中心进行比较
int k=i+1;
while(j>=0 && k<length && s[j]==s[k])
{
num = num + 1;
j--;
k++;
}
}
return num;
}
};