JD10. 两个子串
描述
输入描述
输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母.输出描述
输出一个字符串,即含有连续两个s作为子串的最短字符串。示例1
输入:
abracadabra
输出:
abracadabracadabra
示例2
输入:
a
输出:
aa
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-06
#include<stdio.h> #include<string.h> int main(){ char x[100]={'\0'}; char y[50]={'\0'}; scanf("%s",x); int len=strlen(x); strcpy(y,x); int m,n; int flag; int t; for(m=1;m<len;m++) { flag=0; if(x[m]==x[0]) { t=1; for(n=m+1;n<len;n++) { if(x[n]!='\0'&&x[n]!=x[t]) { flag=1; break; } t++; } if(flag==0) { for(int k=0;k<len;k++) { if(t<len) y[k]=y[t]; else y[k]='\0'; t++; } break; } } } strcat(x, y); printf("%s",x); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2021-08-24
#include<stdio.h> #include<string.h> int main() { char a[1000]; while (gets(a)) { int i,j,i_,j_,len,max=0,t=0; for(i=0;i<strlen(a);i++) { for(j=i+1;j<strlen(a);j++) { len=0; if(a[i]==a[j]) { i_=i; j_=j; while (a[i_]==a[j_]) { i_++; j_++; len++; if(j_>=strlen(a)&&t==0&&i==0) { max=len; t=1; } } } } } for(i=0;i<strlen(a);i++) printf("%c",a[i]); for(i=max;i<strlen(a);i++) printf("%c",a[i]); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-10-19
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ char s[100]; gets(s); int len = strlen(s); int l=0; for(int i=len-1;i>=1;i--){ int j=0; int k=i; while(k<len){ if(s[j]==s[k]){ j++; k++; } else break; } if(k==len){ l=len-i; } } printf("%s",s); for(int m=l;m<len;m++){ printf("%c",s[m]); } }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-09-06
#include <stdio.h> #include <stdlib.h> int main() { char a[50]; gets(a); int num = strlen(a); int k, flag = 0; int i = 0; for (int x = 0; x < num; x++) { printf("%c", a[x]); } //printf("%c", a[i]); for (int j = i + 1; j<num; j++) { if (a[i] == a[j]) { //printf("%c", a[j]); for (k = 1; k < (num - j); k++) { if (a[i + k] != a[j + k])//第一个重复字符后面的字符是否重复 break; } //printf("k=%d,num-j=%d\n", k,num-j); if (k == (num - j))//字符串最后一个字符是重复的,一直重复到a[i+k-1]; { flag = i + k; //printf("flag=%d\n", flag); break; } } } for (int i = flag; i<num; i++) printf("%c", a[i]); //printf("flag=%d\n", flag); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2018-09-07
#include<stdio.h> #include<string.h> int main(){ char a[1001]; int length,t,flag=0,sum=0,n=0; gets(a); length=strlen(a); t=length; for(int i=0;i<length;i++){ if(a[i]==a[n+1]){ flag++; n++; if(n==length-1){ break; } } else{ i=-1; n++; if(n==length-1){ break; } else{ flag=0; } } } for(int i=0;i<t;i++){ printf("%c",a[i]); } for(int i=flag;i<t;i++){ printf("%c",a[i]); } }