JD11. 回文
描述
输入描述
输入包括一个字符串s,字符串s长度length输出描述
输出一个整数,表示牛牛能够得到的最短的回文长度。示例1
输入:
abab
输出:
5
说明:
在末尾添加一个 'a' 构成回文示例2
输入:
a
输出:
1
说明:
本身就是回文C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2019-05-01
int length(char *str); int judgement(char *str, int len); int main(void) { int out; char str[51]; scanf("%s", str); out = length(str); printf("%d", out); return 0; } int length(char *str) { int i, j; int len; char buffer[99]; len = 0; while (str[len]) { buffer[len] = str[len]; len++; } for (i = 0; i < len; i++) { for (j = i - 1; j >= 0; j--) buffer[len + (i - 1 - j)] = buffer[j]; if (judgement(buffer, len + i)) return i + len; } return i + len - 1; } int judgement(char *str, int len) { int i; for (i = 0; i < len / 2; i++) if (str[i] != str[len - 1 - i]) return 0; return 1; }
C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2019-04-29
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { char s[51]; gets(s); int len=strlen(s);//包含了空格 int i=0,j=len-1; int flag=0; int num=0; int p,k; /* while(s[i]==s[j]) { i++; j--; } if(i>=j) { printf("%d\n",len); flag=2; } */ for(i=0;i<=len-2;i++) { num=0; p=len-1; if(s[i]==s[len-1]) { k=i; while(s[p]==s[k]) { num+=2; p--; k++; if(p<k)//偶数对称 { flag=1; break; } if(p==k)//奇数对称 { flag=3; break; } } } if(flag==3) { num++; break; } if(flag==1) { break; } } if(num==0) printf("%d\n",2*len-1); else printf("%d\n",2*len-num); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2019-01-18
int length(char *str); int judgement(char *str, int len); int main(void) { int out; char str[51]; scanf("%s", str); out = length(str); printf("%d", out); return 0; } int length(char *str) { int i, j; int len; char buffer[99]; len = 0; while (str[len]) { buffer[len] = str[len]; len++; } for (i = 0; i < len; i++) { for (j = i - 1; j >= 0; j--) buffer[len + (i - 1 - j)] = buffer[j]; if (judgement(buffer, len + i)) return i + len; } return i + len - 1; } int judgement(char *str, int len) { int i; for (i = 0; i < len / 2; i++) if (str[i] != str[len - 1 - i]) return 0; return 1; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-09-29
int length(char *str); int judgement(char *str, int len); int main(void) { int out; char str[51]; scanf("%s", str); out = length(str); printf("%d", out); return 0; } int length(char *str) { int i, j; int len; char buffer[99]; len = 0; while (str[len]) { buffer[len] = str[len]; len++; } for (i = 0; i < len; i++) { for (j = i - 1; j >= 0; j--) buffer[len + (i - 1 - j)] = buffer[j]; if (judgement(buffer, len + i)) return i + len; } return i + len - 1; } int judgement(char *str, int len) { int i; for (i = 0; i < len / 2; i++) if (str[i] != str[len - 1 - i]) return 0; return 1; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-04-07
#include<stdio.h> #include<string.h> int main(){ char s[50]; scanf("%s",s); int l,i,j,t=1,m; l=strlen(s); for(i=0;i<l;i++){ t=1; for(j=i;j<=(l+i)/2;j++){ if(s[j]!=s[l-1-(j-i)]){ t=0; break; } } if(t==0) continue; else break; } printf("%d",l+i); return 0; }