1 暴力解法
- 求出所有的字串
- 判断每个字串是否是回文
#include<bits/stdc++.h>
using namespace std;
// 判断是否是回文
bool ishuiwen(string s)
{
int index = s.size()/2;
int l=0,r=s.size()-1;
do
{
/* code */
if (s[l]!=s[r])
{
/* code */
return false;
}
l++;
r--;
} while (index--);
return true;
}
// 暴力解法
void baoli(string s)
{
int res = 0;
for (int i = 0; i < s.size(); i++)
{
/* code */
for (int j = i; j < s.size(); j++)
{
/* code */
// cout<<s.substr(i,j-i+1)<<"..."<<endl;
if (ishuiwen(s.substr(i,j-i+1)))
{
cout<<s.substr(i,j-i+1)<<endl;
res++;
}
}
}
cout<<res<<endl;
}
int main(){
string s("fdsklf");
return 0;
}
2,中心扩展方法
- 枚举每一个可能的回文中心,然后用两个指针分别向左右两边拓展,当两个指针指向的元素相同的时候就拓展,否则停止拓展。
class Solution {
public:
int countSubstrings(string s) {
int num = 0;
int n = s.size();
for(int i=0;i<n;i++)//遍历回文中心点
{
for(int j=0;j<=1;j++)//j=0,中心是一个点,j=1,中心是两个点
{
int l = i;
int r = i+j;
while(l>=0 && r<n && s[l--]==s[r++])num++;
}
}
return num;
}
};