回文是正著讀、反著讀都相同,如:
Mom、Dad、Bob
思路與過程
建立方法接收參數並返回結果
public boolean isPalindrome(String string) {
return true;
}
首先要對傳入參數做 null check
if (string == null || string.length() == 0) {
return false;
}
將字串拆分成每個字並轉為大寫
以利後續對比
String[] letters = string.toUpperCase().split("");
使用迴圈頭尾兩兩相比
不一致就返回 false
for (int first = 0, last = letters.length - 1;
first < string.length() / 2;
first++, last--) {
if (!letters[first].equals(letters[last])) {
return false;
}
}
將長度要除二,避免重複比較
完整程式碼
public boolean isPalindrome(String string) {
if (string == null || string.length() == 0) {
return false;
}
String[] letters = string.toUpperCase().split("");
for (int first = 0, last = letters.length - 1;
first < string.length() / 2;
first++, last--) {
if (!letters[first].equals(letters[last])) {
return false;
}
}
return true;
}
測試
System.out.println(isPalindrome("a")); //true
System.out.println(isPalindrome("aa")); //true
System.out.println(isPalindrome("aka")); //true
System.out.println(isPalindrome("Noon")); //true
System.out.println(isPalindrome("Radar")); //true
System.out.println(isPalindrome("Kayak")); //true
System.out.println(isPalindrome("Civic")); //true
System.out.println(isPalindrome("akasaka")); //true
System.out.println(isPalindrome("1221")); //true
System.out.println(isPalindrome("20211202")); //true
System.out.println(isPalindrome("トマト")); //true
System.out.println(isPalindrome("牙刷刷牙")); //true
System.out.println(isPalindrome("上海自來水來自海上")); //true
System.out.println(isPalindrome("ab")); //false
System.out.println(isPalindrome("abs")); //false
System.out.println(isPalindrome("Poof")); //false
System.out.println(isPalindrome("1922")); //false
注意:
如果判斷中文
可能會遇到罕見字問題
System.out.println(isPalindrome("冬冬")); //false
System.out.println(isPalindrome("𥚃𥚃")); //false
因為罕見字視為兩個字
相當於 ABAB
理所當然是 false
目前沒有解法