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

题目描述

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

输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于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) {  //这就是中间缺的情况
			 System.out.println("YES");
			 return;
		 }
		 else{
			 if(input.charAt(i+1)==input.charAt(j)){    
				 i++;
				 while(i=j) {  //这就是中间缺的情况
					 System.out.println("YES");return;
				 }				 
			 }
			 
			 if(input.charAt(i)==input.charAt(j-1)){    
				 j--;
				 while(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;
			 
		 }
		 
		 
	 }




你可能感兴趣的:(每天一道算法题)