1. 程式人生 > 其它 >LeetCode No14 最長公共字首

LeetCode No14 最長公共字首

題目

編寫一個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 1:

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

示例 2:

輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共字首。

提示:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 僅由小寫英文字母組成

思路

行遍歷

要求公共字首,可以先求第一個字串和第二個字串的公共字首s,然後再用s去和第三個字串求一次公共字首並重新賦給s,以此類推,直至字元陣列結束。

列遍歷

字串陣列可以看成是一個字元矩陣,可以按照行掃描,也可以按照列去掃描。

AC程式碼

行遍歷

點選檢視程式碼
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        String prefix = strs[0];
        int count = strs.length;
        for (int i = 1; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (prefix.length() == 0) {
                break;
            }
        }
        return prefix;
    }

    public String longestCommonPrefix(String str1, String str2) {
        int length = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < length && str1.charAt(index) == str2.charAt(index)) {
            index++;
        }
        return str1.substring(0, index);
    }
}

列遍歷

點選檢視程式碼
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if( strs.length == 0 ) {
            return "";
        }
        char[][] chars = new char[205][205];
        StringBuilder sb = new StringBuilder();
        int row = 0;
        int col = 205;
        int len = 0;
        for(String str : strs) {
            chars[row++] = str.toCharArray();
            col = Math.min(col, str.length());
        }
        for(int i=0; i<col; i++) {
            char ch = chars[0][i];
            boolean flag = true;
            for(int j=0; j<row; j++) {
                if( ch!=chars[j][i] ) {
                    flag = false;
                    break;
                }
            }
            if( flag ) {
                sb.append(ch);
            } else {
                break;
            }
        }
        return sb.toString();
    }
}