LeetCode每日一題:最長公共字首(No.14)

胖宅老鼠發表於2019-04-17

題目:最長公共字首


編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""。
複製程式碼

示例:


輸入: ["flower","flow","flight"]
輸出: "fl"

輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
複製程式碼

思考:


取字串陣列中第一個字串,當作是最長公共字首.
然後從第二個字串開始迴圈,比較其中是否存在字串一,如果不存在就將字串一截短一位。
直至找到在所有字元傳中都存在的最長字首。如果直至字串一被截到長度為0還沒有找到,則說明沒有最長公共字首返回“”。
複製程式碼

實現:


class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) {
            return "";
        }
        //字串一
        String prefix = strs[0];
        //從下標為1開始迴圈字串陣列
        for (int i = 1; i < strs.length; i++) {
            //不等於0說明不存在或者不是字首
            while (strs[i].indexOf(prefix) != 0) {
                //截掉字串最後一位
                prefix = prefix.substring(0, prefix.length() - 1);
                if (TextUtils.isEmpty(prefix)) {
                    return "";
                }
            }
        }
        return prefix;
    }
}
複製程式碼

再思考:


還可以一位一位比較,同樣是迴圈取第一個字串的第i個字元,與字串陣列中其他的字串的第i個字元比較。
直至找到與字串一第i個字元出現不相同或者i已經超過了某個字串的長度為止。
此時字串一從0到i個字元就是最長公共字首。
複製程式碼

再實現:


class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {return ""};
        for (int i = 0; i < strs[0].length(); i++) {
            //迴圈取第一個字串的第i個字元
            char charAt = strs[0].charAt(i);
            //從下標為1開始迴圈字串陣列
            for (int j = 1; j < strs.length; j++) {
                //比較字串一的第i位與其他字串的第i為是否相同
                //長度i是否已經超過字串的長度或者出現不相同說明最長字串到此為止
                if (i == strs[j].length() || strs[j].charAt(i) != charAt)
                   {
                        return strs[0].substring(0, i);
                   }
            }
        }
        return strs[0];
    }
}複製程式碼

相關文章