14. 【简单】最长公共前缀


链接

题目描述

在这里插入图片描述

1.水平扫描法(利用indexOfs)

思路

就是把第一个String 先作为初始的公共前缀,然后不断缩小的过程

在这里插入图片描述
在这里插入图片描述
时间复杂度: O ( S ) O(S) ,S是所有字符串数量的总和
在这里插入图片描述
空间复杂度: O ( S ) O(S)

代码

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs == null || strs.length == 0){
            return "";
        }
        String prefix = strs[0];
        for(int i = 1; i < strs.length ;i++){
            while(strs[i].indexOf(prefix) != 0){
                prefix = prefix.substring(0,prefix.length()-1);
                if(prefix.length() == 0){
                    return "";
                }
            }
        }
        return prefix;
    }
}

2.水平扫描(每一列)

思路

我们从前往后枚举字符串的每一列,先比较每个字符串相同列上的字符(即不同字符串相同下标的字符)然后再进行对下一列的比较。

时间复杂度: O ( S ) O(S)
在这里插入图片描述
空间复杂度: O ( 1 ) O(1)

代码

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs == null || strs.length == 0){
            return "";
        }
        for(int i = 0; i < strs[0].length();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];
    }
}
发布了55 篇原创文章 · 获赞 1 · 访问量 888

猜你喜欢

转载自blog.csdn.net/weixin_42469108/article/details/103597857
今日推荐