14. 最长公共前缀 - LeetCode

14. 最长公共前缀

题目链接

横向扫描

  • 先比较前两个字符串的最长公共前缀,所得结果再与下一个字符串比较
  • 通过递归的方式,将多个字符串比较转换为两两比较
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0){
            return "";
        }
        String ans = strs[0];
        for(int i = 1; i < strs.length; i++)
            ans = longestCommonPrefix(ans, strs[i]);
        return ans;
    }

    public String longestCommonPrefix(String str1, String str2){
        int len = Math.min(str1.length(), str2.length());
        StringBuilder ans = new StringBuilder();
        for(int i = 0; i< len; i++){
            if(str1.charAt(i) == str2.charAt(i))
                ans.append(str1.charAt(i));
            else return ans.toString();
        }
        return ans.toString();
    }
}
  • 时间复杂度O(mn),m是字符串数组中的字符串的平均长度,n是字符串的数量
  • 空间复杂度为O(1)

纵向扫描

  • 遍历字符串的每一位,比较所有字符串的这一位是否相同
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0){
            return "";
        }
        int len = strs[0].length();
        for(int i = 0; i < len; i++){
            char c = strs[0].charAt(i);
            for(int j = 1; j < strs.length; j++){
                if(i == strs[j].length() || strs[j].charAt(i) != c)
                    return strs[0].substring(0, i);
            }
        }
        return strs[0];
    }
}
  • 时间复杂度O(mn),m是字符串数组中的字符串的平均长度,n是字符串的数量
  • 空间复杂度为O(1)
posted @ 2021-01-27 11:45  一天到晚睡觉的鱼  阅读(96)  评论(0)    收藏  举报