MGJ5. 回文串
描述
给定一个字符串,问是否能通过添加一个字母将其变为回文串。输入描述
一行一个由小写字母构成的字符串,字符串长度小于等于10。输出描述
输出答案(YES\NO).示例1
输入:
coco
输出:
YES
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-09-22
#include <stdio.h> #include <string.h> int main() { char s[16]; while(scanf("%s",s)!=EOF) { int len=strlen(s); if(len%2==0) { int index=len/2,i; for(i=1;i+index<len;i++) if(s[index+i]!=s[index-i]) break; if(i+index==len) { printf("YES\n"); continue; } index=len/2-1; for(i=1;index-i>=0;i++) if(s[index+i]!=s[index-i]) break; if(i-index==-1) { printf("YES\n"); continue; } } else { int index=len/2,i; for(i=0;index+1+i<len;i++) if(s[index-i]!=s[index+1+i]) break; if(index+1+i==len) { printf("YES\n"); continue; } for(i=0;index-1-i>=0;i++) if(s[index+i]!=s[index-1-i]) break; if(index-1-i==-1) { printf("YES\n"); continue; } } printf("NO\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-18
#include<stdio.h> #include<string.h> int main() { char str[100]; while (gets(str)) { int i,j,k,f=0; char t[100]; for(i=0;i<strlen(str);i++) { strcpy(t,str); for(j=i;j<=strlen(str);j++) { t[j]=t[j+1]; } j=0; k=strlen(t)-1; while (j<k) { if(t[j]!=t[k]) break; j++; k--; } if(j>=k) { printf("YES\n"); f=1; break; } } if(f!=1) printf("NO\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2018-11-04
#include<stdio.h> #include<string.h> int main(){ char s[11]; while(scanf("%s",s)!=EOF){ int i,j,p1,p2,flag=0;; for(i=0,j=strlen(s)-1;i<j&&s[i]==s[j];i++,j--); if(i>=j) printf("YES\n"); else { p1=i;p2=j; j=j-1; for(;i<j&&s[i]==s[j];i++,j--); if(i>=j){ printf("YES\n"); flag=1;} else { p1=p1+1; for(;p1<p2&&s[p1]==s[p2];p1++,p2--); if(p1>=p2){ printf("YES\n"); flag=1;} } } if(flag==0) printf("NO\n"); } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-10-31
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdbool.h> #include<stdlib.h> #include<string.h> bool IsReverse(const char* str,int size) { int i = 0, j = size - 1; for (; i < j; i++, j--) { if (str[i] != str[j]) { return false; } } return true; } bool IsAddWord(const char* str,int size) { for (int i = 0; i < size; i++) { char tmp[10]; int k = 0; for (int j = 0; j < size; j++) { if (j != i) { tmp[k] = str[j]; k++; } } if (IsReverse(tmp, k)) { return true; } } return false; return false; } int main() { char s[10]; int size; while (scanf("%s",s) != EOF) { int size = strlen(s); if (IsAddWord(s,size)) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-09-13
# include<stdio.h> int main(){ char str[10]; while(scanf("%s",&str)!=EOF){ int err = 1; int index = 0; int len =0; while(str[index] - '\0' != 0){ len++; index++; } int low = 0; int high = len -1; while(low < high){ if (str[low] - str[high] != 0){ err--; if (str[low] - str[high-1] != 0 && str[low+1] - str[high]!=0){ err = -1; break; }else if (str[low] - str[high-1] != 0){ low++; }else{ high--; } }else{ low++; high--; } } if (err < 0 ) printf("NO\n"); else printf("YES\n"); } return 0; }