leetcode 14. Longest Common Prefix

1362 ワード

原題リンク:
14. Longest Common Prefix
【考え方】
2つの考え方があります.
1.共通の単語をcommonで記録し、最初は最初の単語に設定し、strsの2番目から最後の単語と1つずつ比較し、commonの長さを更新する
2.すべての文字列のi番目の文字を比較するたびに、すべての文字のi番目の文字が同じであれば、iに1を加え、i+1番目を比較します.等しくない、またはある文字列の長さがiに等しいと発見するとstrs[0]を返す.substring(0,i),本題は解法2を推奨し,ここでは解法2を採用する.
    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) return "";
        for (int i = 0; i < strs[0].length(); i++)
            for (String s : strs)
                if (i == s.length() || s.charAt(i) != strs[0].charAt(i)) return strs[0].substring(0, i);
        return strs[0];
    }

117/117 test cases passed. Runtime: 4 ms  Your runtime beats 27.61% of javasubmissions.
【補足】
補足の考え方1:
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) return "";
        StringBuilder common = new StringBuilder();
        common.append(strs[0]);
        for (int i = 1; i < strs.length; i++) {
            int j = 0;
            for (int len = Math.min(common.length(),  strs[i].length()); j < len; j++)
                if (common.charAt(j) != strs[i].charAt(j)) break;
            if (j == 0) return "";
            common.setLength(j);
        }
        return common.toString();
    }