LeetCode #2108 Find First Palindromic String in the Array 找到陣列中第一個回文的字串

英文原文如下

Given an array of strings words, return the first palindromic string in the array. If there is no such string, return an empty string “”.

A string is palindromic if it reads the same forward and backward.

中文翻譯

給予一個字串陣列 words,回傳陣列中第一個為回文的字串。要是沒有任一符合條件的字串,則回傳空白字串””

一個前後讀起來一樣的字串就被視為回文

範例及題目限制

💡Hint 1 提示1

Iterate through the elements in order. As soon as the current element is a palindrome, return it.

按照順序遍歷全部的元素,要是當前的元素是回文,就回傳它。

💡Hint 2 提示2

To check if an element is a palindrome, can you reverse the string?

確認一個元素是否回文,你可以反轉整個字串?


解題思路

講到回文,其實之前的題目就有做過了 – LeetCode #9 Palindrome Number

差異就只是在於第9題是判斷單一的數字,這一題則是字串陣列

那我們可以輕鬆的將其中的兩個方法改寫

C# 解決方案

方案1 – 反轉整個字串

public class Solution {
    public string FirstPalindrome(string[] words) {
        foreach(var word in words){
            if(IsPalindrome(word)){
                return word;
            }
        }
        return string.Empty;
    }

    public bool IsPalindrome(string w) {
        char[] charArr = w.ToCharArray();   //the original target
        char[] reverseArr = w.ToCharArray();   

        Array.Reverse(reverseArr);                 
     
        return charArr.SequenceEqual(reverseArr); //compare two array                   
    }
}

方案2 – 再用一個for loop來判斷

public class Solution {
    public string FirstPalindrome(string[] words) {
        foreach(var word in words){
            if(IsPalindrome(word)){
                return word;
            }
        }
        return string.Empty;
    }

    public bool IsPalindrome(string w) {    
        
        for(int i=0;i<w.Length/2;i++)   
        {
            if(w[i] != w[w.Length-1-i]) 
            {
                return false;           // if any char not the same, return false
            }
        }
        return true;                    
    }
}

這邊再解釋一次

這個其實就是不去反轉整個字串,只比較前半個字串跟後半個字串倒著讀是否一樣

比起整個反轉,對效能應該是更有幫助的

Java 解決方案

方案1 – 反轉整個字串

class Solution {
    public String firstPalindrome(String[] words) {
        for(String word : words){
            if(isPalindrome(word)){
                return word;
            }
        }
        return "";
    }

    public boolean isPalindrome(String w) {
        StringBuilder str = new StringBuilder(w);
        return w.equals(str.reverse().toString());
    }
}

方案2 – 再用一個for loop來判斷

class Solution {
    public String firstPalindrome(String[] words) {
        for(String word : words){
            if(isPalindrome(word)){
                return word;
            }
        }
        return "";
    }

    public boolean isPalindrome(String w) {
        for(int i=0;i<w.length()/2;i++)
        {
            if(w.charAt(i) != w.charAt(w.length()-1-i))
            {
                return false;
            }
        }
        return true;
    }
}

結論

年假要過完了… 刮刮樂的發財夢又要等到明年了~

但還是祝各位新年快樂啦~~~

🧡如果這篇文章有幫上你的一點點忙,那是我的榮幸

🧡收藏文章或幫我點個廣告,那都是對我的支持

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

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

相關題目 :

一些隨機的LeetCode文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *