题目
思路 题解
方法1:思路都在代码里了
class Solution {
public:
int countSubstrings(string s) {
//每个值都作为中心值 左右两个指针 但是要考虑奇偶的情况bb 和 aba ----> i前面的字符串是不是回文串abcde a ab abc abcd abcde依次判断这些字符串有几个回文串 这样就可以有奇偶的情况了
//那怎么判断是不是回文并且返回正确的回文数呢 以abcde举例 看是不是回文 有几个回文 就还是找中间,判断奇偶 然后加
int n = s.size();
int count = 0;
for(int i = 0; i < n*2-1; i++)//要让每个值 都做中间
{
int l = i/2;//5/2 = 2;abcde那就是正中间位置的元素 4/2 =2;abcd 偏右的元素了 那r咋整 也不能直接加1
//啊 不是 abcde i= 4; 4/2 = 2 正中间位置 abcd i= 3 3/2 = 1在b的位置 这样r+1 在c的位置
int r = i/2 + i%2;//奇数在同一个位置 偶数在两侧
while(l >= 0 && r < n && s[l] == s[r])//这样奇数单个也算进去了
{
count++;
l--;
r++;
}
}
return count;
}
};
方法2 找出回文个数为i的字符串 觉得这个思路也很棒
方法3 这个思路是我第一次做但是卡在了奇偶情况下 看到了这个醍醐灌顶 j = 0或者1