QY23. 平方串
描述
如果一个字符串S是由两个字符串T连接而成,即S = T + T, 我们就称S叫做平方串,例如"","aabaab","xxxx"都是平方串.输入描述
输入一个字符串s,字符串长度length(1 ≤ length ≤ 50),字符串只包括小写字符。输出描述
输出一个正整数,即满足要求的平方串的长度。示例1
输入:
frankfurt
输出:
4
C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2019-05-16
#include<stdio.h> #include<string.h> int result_num[51][51] = {0}; int max_longstr(char *a,char *b,int n,int m)//a,b分别是两个字符串,需要预先定义result——num { int i = 0,j = 0; for(i = 1;i<=n;i++) { for(j = 1;j<=m;j++) { if(a[i-1] == b[j-1]) { result_num[i][j] = result_num[i - 1][j - 1] + 1; } else { if(result_num[i - 1][j] > result_num[i][j-1]) { result_num[i][j] = result_num[i - 1][j]; } else { result_num[i][j] = result_num[i][j-1]; } } } } return result_num[n][m]; } int main() { char *a = 0,*b = 0; char str[51] = {0},sa[52] = {0},sb[52] = {0}; int length = 0; int i = 0,j = 0,k = 0,temp = 0,result = 0,max = 0; //数据输入部分 scanf("%s",str); length = strlen(str); for(i = 0;i<(length-1);i++) { strncpy(sa,str,i+1); strcpy(sb,&str[i+1]); /*if(i == 2) printf("*%s**%s*",sa,sb);*/ max = max_longstr(sa,sb,i+1,length - i); if(max > result) result = max; } printf("%d\n",result*2); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-12-23
#include<stdio.h> #include<string.h> int result_num[51][51] = {0}; int max_longstr(char *a,char *b,int n,int m)//a,b分别是两个字符串,需要预先定义result——num { int i = 0,j = 0; for(i = 1;i<=n;i++) { for(j = 1;j<=m;j++) { if(a[i-1] == b[j-1]) { result_num[i][j] = result_num[i - 1][j - 1] + 1; } else { if(result_num[i - 1][j] > result_num[i][j-1]) { result_num[i][j] = result_num[i - 1][j]; } else { result_num[i][j] = result_num[i][j-1]; } } } } return result_num[n][m]; } int main() { char *a = 0,*b = 0; char str[51] = {0},sa[52] = {0},sb[52] = {0}; int length = 0; int i = 0,j = 0,k = 0,temp = 0,result = 0,max = 0; //数据输入部分 scanf("%s",str); length = strlen(str); for(i = 0;i<(length-1);i++) { strncpy(sa,str,i+1); strcpy(sb,&str[i+1]); /*if(i == 2) printf("*%s**%s*",sa,sb);*/ max = max_longstr(sa,sb,i+1,length - i); if(max > result) result = max; } printf("%d\n",result*2); return 0; }