字符串添加一个字母将其变为回文串

来源:互联网 发布:天书世界圣物突破数据 编辑:程序博客网 时间:2024/05/17 03:29

题目描述

给定一个字符串,问是否能通过添加一个字母将其变为回文串。

输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。


输出描述:
输出答案(YES\NO).

输入例子:
coco

输出例子:
YES



问题分析:首先缺了一个字符的回文串是怎样的
1、在头部、尾部缺 如 abcb(在尾部缺) bdffdbe(在头部缺)
------这种类型只要把首部、或者尾部的一个字符串去掉,那天还是一个回文字符串
2、在中间部分缺 如: abcdrfcrdcbae这种情况,只要把首尾相同的字符去掉,就又会出现 1 的这种情况 abcdrfcrdcba————————>fc 
abcdrfcrbae------->cdrfcr
3、还有一种情况就是在最中间缺,这种情况,就算他缺了一个字符,它还是一个回文字符串 如: aba abba



public class main7 { public static void  main(String args[]) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String input=sc.next();doIt(input);}}  public static void doIt(String input){ int i=0,j=input.length()-1;  while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 // System.out.println(i+"   "+ j); if(i>=j) {  //这就是中间缺的情况 System.out.println("YES"); return; } else{ if(input.charAt(i+1)==input.charAt(j)){     i++; while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 if(i>=j) {  //这就是中间缺的情况 System.out.println("YES");return; }  }  if(input.charAt(i)==input.charAt(j-1)){     j--; while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 if(i>=j) {  //这就是中间缺的情况 System.out.println("YES");return; }  }   }  System.out.println("NO");    }



代码很贵一斤,可以换成递归实现减少代码
public static void  main(String args[]) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String input=sc.next();boolean b = doIt02(input,0,input.length()-1,1);System.out.println(b?true:false);}}  public static boolean doIt02(String input,int start,int end ,int deep){  if(start>=end){ return true; } if(input.charAt(start)==input.charAt(end)){return doIt02(input,start+1,end-1,deep); } else{  if(deep==1){ return    doIt02(input,start+1,end,deep+1)||doIt02(input,start,end-1,deep+1); }  return false;  }   }




0 0
原创粉丝点击