WY18. 统计回文
描述
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。输入描述
每组输入数据共两行。 第一行为字符串A 第二行为字符串B 字符串长度均小于100且只包含小写字母输出描述
输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数示例1
输入:
aba b
输出:
2
C 解法, 执行用时: 1ms, 内存消耗: 360KB, 提交时间: 2018-08-22
#include<stdio.h> #include<string.h> int AAA(char *A,char *B,int lena,int lenb,int count); int main() { char A[100]; char B[100]; int count=0; gets(A); gets(B); int lena=strlen(A); int lenb=strlen(B); printf("%d",AAA(A,B,lena,lenb,count)); return 0; } int AAA(char *A,char *B,int lena,int lenb,int count) { char C[210]; int i,j,m; for(i=0;i<lena+1;i++) { int p=0; int result=1; for(j=0;j<i;j++) {C[p]=A[j]; p++; } for(m=0;m<lenb;m++) { C[p]=B[m]; p++; } for(j=i;j<lena;j++) { C[p]=A[j]; p++; } for(j=0;j<(p/2);j++) { if(C[j]==C[p-j-1]) continue; else result=0; } //printf("%d%s\n",p,C); if(result==1) count++; } return count; }
C++ 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2017-08-28
#include<iostream> #include<string> #include<algorithm> using namespace std; int main(){ string strA, strB; cin >> strA; cin >> strB; int i; int count = 0; for(i = 0; i <= strA.length(); i++){ string strC = strA; strC.insert(i, strB); string strD = strC; reverse(strD.begin(), strD.end()); if(strC == strD) count++; } cout << count << endl; return 0; }