
[LeetCode] 2108. Find First Palindromic String in the Array
題目說明
給定一個字串陣列 words,請返回陣列中第一個迴文字串。如果沒有這樣的字串,則返回空字串 “”。
一個迴文字串是指它從左到右讀和從右到左讀是相同的。
題目連結:LeetCode - Find First Palindromic String in the Array
解法一 : 使用 StringBuilder Reverse
Java 有內建反轉字串的方法,這邊可以拿來使用
- 走訪 words 每個字串
- 使用 StringBuilder Reverse 將字串反轉
- 比較反轉字串和字串是否相等
- 傳回第一個迴文字串,如果沒有則傳回空字串
Code 如下:
public String firstPalindrome(String[] words) {
for (String word : words) {
StringBuilder wordReverse = new StringBuilder(word).reverse();
if (wordReverse.toString().equals(word)) {
return word;
}
}
return "";
}
解法二 : 不使用內建方法來實現
- 走訪 words 每個字串
- 使用 isPalindrome 方法,檢查是否為迴文
- 傳回第一個迴文字串,如果沒有則傳回空字串
Code 如下:
public String firstPalindrome(String[] words) {
// 走訪字串陣列中的每個字串
for (String word : words) {
// 調用 isPalindrome 方法檢查是否為迴文
if (!isPalindrome(word).isEmpty()) {
// 若是迴文則立即返回該字串
return word;
}
}
// 若沒有找到任何迴文字串,則返回空字串
return "";
}
private String isPalindrome(String word) {
// 初始化迴文標誌為 true
boolean isPalindrome = true;
// 使用迴圈比較字串的首尾字符
// 這邊 word.length() / 2 是為了減少查詢的次數
for (int i = 0; i < word.length() / 2; i++) {
// 若首尾字符不相同,則將迴文標誌設為 false 並跳出迴圈
if (word.charAt(i) != word.charAt(word.length() - 1 - i)) {
isPalindrome = false;
break;
}
}
// 若是迴文,則返回該字串;否則返回空字串
if (isPalindrome) {
return word;
}
return "";
}