LeetCode #14 Longest Common Prefix


Longest Common Prefix


Link : Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string ""

Ex 1:

  • Input: strs = ["flower","flow","flight"]
  • Output: "fl"
  • Ex 2:

  • Input: strs = ["dog","racecar","car"]
  • Output: ""
  • Explanation: There is no common prefix among the input strings.
  • Constraints

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] consists of only lower-case English letters.
  • Java code

    class LC5 {
        public String longestCommonPrefix(String[] strs) {
            if (strs.length == 1){
                return strs[0];
            }
            String answer = compareString(strs[0], strs[1]);
            if (strs.length == 2){
                return answer;
            }
            for(int i = 2; i<strs.length; i++){
                answer = compareString(answer, strs[i]);
            }
            return answer;
        }
    
        static String compareString(String str1, String str2){
            String[] tmpList = lengthCompare(str1, str2);
            String maxStr = tmpList[0];
            String minStr = tmpList[1];
            StringBuilder answer = new StringBuilder();
            for(int i = 0; i < minStr.length(); i++){
                if (maxStr.charAt(i) != minStr.charAt(i)){
                    break;
                }
                answer.append(minStr.charAt(i));
            }
            return String.valueOf(answer);
        }
    
        static String[] lengthCompare(String str1, String str2){
            String[] strList = new String[2]; // strList = [maxStr, minStr]
            int str1Length = str1.length();
            int str2Length = str2.length();
            String maxStr = "";
            String minStr = "";
    
            if (str1Length > str2Length){
                strList[0] = str1;
                strList[1] = str2;
                return strList;
            }
    
            strList[0] = str2;
            strList[1] = str1;
            return strList;
    
        }
    }
    

    に答える


    static String[] lengthCompare(String str1, String str2)

  • 文字列の長さを比較する方法
  • String[]配列では、1番目の要素を長い文字列に、2番目の要素を短い文字列に入れて返します.
  • static String CompareString(String str1, String str2)

  • 文字列を短い文字列長の重複文に変換してプレフィックスを検索する方法
  • .
  • 文字列からなるプレフィックス(answer)を返します.
  • public String longestCommonPrefix(String[] strs)

  • 文字列が1つしかない場合は、その文字列が返されます.
  • 2つの
  • 文字列のみの場合、CompareStringメソッドで求めたプレフィックスが返されます.
  • 文字列が3文字より多い場合、最初に求めた接頭辞と3文字列から、すべての文字列をCompareStringメソッドの引数として、接頭辞を更新して返します.
  • 教訓

  • 今回も問題をよく読まず、プレフィックスではなくLCSを求める問題だと勘違い.
  • 時間は長かったのですが、読み直して、間違ったところがあることに気づきました.
  • 頭がいいので、体はそんなに苦労しません.