[LeetCode] 2108. Find First Palindromic String in the Array


題目說明

給定一個字串陣列 words,請返回陣列中第一個迴文字串。如果沒有這樣的字串,則返回空字串 “”。

一個迴文字串是指它從左到右讀和從右到左讀是相同的。

題目連結:LeetCode - Find First Palindromic String in the Array

解法一 : 使用 StringBuilder Reverse

Java 有內建反轉字串的方法,這邊可以拿來使用

  1. 走訪 words 每個字串
  2. 使用 StringBuilder Reverse 將字串反轉
  3. 比較反轉字串和字串是否相等
  4. 傳回第一個迴文字串,如果沒有則傳回空字串

Code 如下:

public String firstPalindrome(String[] words) {
    for (String word : words) {
        StringBuilder wordReverse = new StringBuilder(word).reverse();
        if (wordReverse.toString().equals(word)) {
            return word;
        }
    }
    return "";
}

解法二 : 不使用內建方法來實現

  1. 走訪 words 每個字串
  2. 使用 isPalindrome 方法,檢查是否為迴文
  3. 傳回第一個迴文字串,如果沒有則傳回空字串

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 "";
}