添加字母變成迴文字符串問題(Java實現)

看到一個算法題—>給定一個字符串,問是否能經過添加一個字母將其變爲迴文串 貼上本身的實現思路:java

  • 這個添加字符能夠是添在開頭,也能夠是添加在隊尾,也多是添加在中間
  • 能經過添加一個字符使字符串變成迴文字符串,也就意味着若是刪掉字符串開頭或結尾一個字符後,這個子串應該是迴文字符串。
  • 或者這個字符串自己是一個迴文字符串,由於在字母串中間添加字母,也是迴文字符串。
  • 若是它的首字母與末字母相同,那麼將這兩個字母去掉,重複這個過程,直到不相同。
  • 由於"fcbabf"的狀況下,是要在"bf"之間添加c,總體就會變成迴文字符串,也就意味要將以前首尾相同的
import java.util.*;
public class addOne {
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
	    String str = in.nextLine();
	    System.out.println(isPalindrome(str));
	
	}
	
	private static String isPalindrome(String str) {
	    if(str.length()<2) return "YES";
	    int start=0;
	    int end =str.length()-1;
	    char[] arr = str.toCharArray();
	    //把首尾相同的字符排除不進入比較
	    while(arr[start]==arr[end]&&start<end){
	        start++;
	        end--;
	    }
	    str=str.substring(start,end+1);
	    //三種情形:去掉頭字符後迴文;去掉尾字符後迴文;自己迴文;
	    if (isP(str.substring(1)) || isP(str.substring(0, str.length() - 1))||isP(str)) {
	        return "YES";
	    }else{
	        return "NO";
	    }
	
	}
	//Java特有方法判斷迴文
	private static boolean isP(String str){
	    return new StringBuilder(str).reverse().toString().equals(str);
	}
}
相關文章
相關標籤/搜索