#29108: JAVA 用ArrayList 解的


wer12369qaz15963@gmail.com (dentr)

學校 : 新北市立清水高中
編號 : 174903
來源 : [111.248.152.60]
最後登入時間 :
2022-07-26 15:13:49
a224. 明明愛明明 | From: [219.84.98.239] | 發表日期 : 2022-01-29 17:49

解題思路  基本上回文 的文字結構可以分解成 左邊 跟右邊 要對稱 中間 只能是一個字 例子 

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...");
}
}
}
 
ZeroJudge Forum