解題思路 基本上回文 的文字結構可以分解成 左邊 跟右邊 要對稱 中間 只能是一個字 例子
AA | B | AA
Le | v | el
知道了這點 只要把相同的字兩兩配對 然後檢查烙單的字(也就是中間的字) 是不是大於一個就能 判斷是不是回文了
假設 我們現在要處裡的字串是 Level
第一個字L 沒遇過 丟進 ArrayList(現在Arraylist 有L) 第二個字e 沒遇過 也丟進去(ArrayList 有 l , e) 第三個字v 也沒遇過 也丟進去 (Arraylist 有 l , e , v)
第四個字 e 檢查ArrayList 有沒有 有的話刪除 e元素(現在 ArrayList 為 l ,v) 第五個字l 同上 刪除 l 元素 (現在Arraylsit只剩下v)
最後 Arraylist 剩下的就是 中間的字了( v ) 檢查有沒有大於一個 就能判斷了
注意:
Arraylist 的 romve() 使用方法為 remove(int index) remove(obj ) 用char 貌似會被當 index 而出問題 (不知道我只是新手owo..)
有更好的想法歡迎提出!
import java.util.ArrayList;
import java.util.Scanner;
public class a224 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while (input.hasNext()){
String a = input.next();
ArrayList<String> answer = new ArrayList<>();
for (int i =0;i<a.length();i++){
if (a.charAt(i)>=65&&a.charAt(i)<=90){//如果為大寫
if(!answer.contains(String.valueOf(a.charAt(i)))) { answer.add(String.valueOf(a.charAt(i)));} else{answer.remove(String.valueOf(a.charAt(i)));}
}
if (a.charAt(i)>=97&&a.charAt(i)<=122) {//如果為小寫
String o =String.valueOf(Character.toUpperCase(a.charAt(i)));
if (!answer.contains(o)) {
answer.add(o);
} else {
answer.remove(o);
}
}
}
System.out.println(answer.size()<=1 ? "yes !":"no...");
}
}
}