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             
View Code

 

posted @ 2013-05-20 23:54  ihge2k  阅读(1416)  评论(0编辑  收藏  举报