34:回文子串(1.7编程基础之字符串)
2017-09-05 16:37
330 查看
34:回文子串
总时间限制: 1000ms 内存限制: 65536kB描述
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入
一个字符串,由字母或数字组成。长度500以内。
输出
输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
样例输入
123321125775165561
样例输出
33
11
77
55
2332
2112
5775
6556
123321
165561
#include <iostream> #include<string.h> using namespace std; //http://noi.openjudge.cn/ch0107/34/ //我觉得第二重循环的控制j的长度很有必要 int len; char a[550]; bool f(int x,int y,int k){ bool b=true; if(k%2==1){//奇数偶数两种情况 while(x+2<=y){ if(a[x]!=a[y]){ b=false; break; } else{ x++;y--; } } } else if(k%2==0){ while(x+1<=y){ if(a[x]!=a[y]){ b=false; break; } else{ x++;y--; } } } return b; } int main(int argc, char *argv[]) { cin>>a; len=strlen(a); for(int i=2;i<=len;i++){ for(int j=0;j<=len-i;j++){//需要仔细考虑临界值 bool b=f(j,j+i-1,i); if(b){ for(int k=j;k<=j+i-1;k++){ cout<<a[k]; } cout<<endl; } } } return 0; }
9.15又写了一遍,奇数偶数情况可以一起处理
#include <iostream> #include<string.h> using namespace std; //http://noi.openjudge.cn/ch0107/34/ char a[600]; int len,n,flag; int main(int argc, char *argv[]) { while(cin>>a){ len=strlen(a); n=2;//循环变量 while(n<=len){ for(int i=0;i<=len-n;i++){ int end=n+i-1,k=i; flag=0; while(end>=k+1){ //奇数偶数情况可以一起做 if(a[k]!=a[end]){ flag=1; break; } k++;end--; } if(!flag){ for(int j=i;j<=n+i-1;j++){ cout<<a[j]; } cout<<endl; } } n++; } } return 0; }
相关文章推荐
- Openjudge NOI题库1.7编程基础之字符串 34:回文子串
- 【openjudge 7603】[1.7编程基础之字符串] 34:回文子串
- JAVA代码—算法基础:给定一个字符串查找最长回文子串
- 最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 笔试——字符串算法题——寻找最大回文子串
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- 动态规划求字符串的回文子串
- UVA - 10617 Again Palindrome 字符串的回文子串
- 算法学习--字符串--最长回文子串
- 给定一个字符串s,找出s中最长的回文子串,你可以假设s的最大长度是1000。
- 求字符串的最长回文子串
- 28:单词倒排( 1.7编程基础之字符串)
- 求一个字符串中的最大回文子串
- JAV打印字符串中最大的回文子串
- Manarcher 求 字符串 的最长回文子串 【记录】
- 1.7编程基础之字符串:06合法 C 标识符
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- 34:回文子串
- java基础—找出两个字符串中最大的子串
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35