看到一個算法題—>給定一個字符串,問是否能通過添加一個字母將其變為回文串
貼上自己的實現思路:
- 這個添加字符可以是添在開頭,也可以是添加在隊尾,也可能是添加在中間
- 能通過添加一個字符使字符串變成回文字符串,也就意味着如果刪掉字符串開頭或結尾一個字符后,這個子串應該是回文字符串。
- 或者這個字符串本身是一個回文字符串,因為在字母串中間添加字母,也是回文字符串。
- 如果它的首字母與末字母相同,那么將這兩個字母去掉,重復這個過程,直到不相同。
- 因為"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);
}
}