hdu 1544(求回文子串的个数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1544
思路:枚举中间点,分为奇数长度和偶数长度,然后向两边扩展就可以了,如果不相等,就直接跳出;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 5005 6 char str[MAXN]; 7 8 int main(){ 9 while(~scanf("%s",&str)){ 10 int len=strlen(str),l,r; 11 int ans=len; 12 for(int i=0;i<len;i++){ 13 l=i-1,r=i+1;//奇数长度 14 while(l>=0&&r<len&&str[l]==str[r]){ 15 l--,r++; 16 ans++; 17 } 18 l=i,r=i+1;//偶数长度 19 while(l>=0&&r<len&&str[l]==str[r]){ 20 l--,r++; 21 ans++; 22 } 23 } 24 printf("%d\n",ans); 25 } 26 return 0; 27 } 28