【LeetCode力扣题库】14. 最长公共前缀(简单)

这一生的挚爱 提交于 2021-02-04 16:12:57

原题目链接:14. 最长公共前缀


题目描述:

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

 

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
 


提示:

0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题思路:

  1. 在比较之前,得先对传进来的字符串数组进行判断,判断条件是。不为空而且长度不为0
  2. 我们以纵向比较为思路,什么意思呢?
  3. 说白了就是先取出第一个字符串strs[0],然后取出字符串strs[0]的第一个的字符c,用这个c去跟剩余的字符串的第一个的字符比较

3.1  如果相同,不管,因为strs[0]的字符串已经包含了这些公共前缀

3.2  如果不同,结束循环,由于strs[0]的字符串已经包含了这些公共前缀,那么只需要对strs[0]字符串进行截取,循环到哪里,就截取到哪里

3.3  最后一种情况,当strs[0]字符串还没循环完,此时发现在strs[]数组中,存在字符串的长度是小于strs[0]字符串长度,因为当我们知道这种情况的时候,因为题目是要所有的字符串都拥有的前缀,那么此时这个小于strs[0]字符串长度的字符串,就是我们需要的那个字符串

我们以输入strs = ["flower","flow","flight"]转进行自制动画演示

点击这里在B站看动画演示喔,喜欢的看官可以点点关注,谢谢

废话不多说,直接上代码,为了让各位看官更能清晰理解,我的代码写得不精简,我的代码里加了大量的注释,相信各位看官可以理解,如果我有些没写清楚或者写错的,可以评论区或者私信我喔

public String longestCommonPrefix(String[] strs) {
        //对strs做判断
        if(strs == null || strs.length == 0) return "";
        //数组中的第一个字符串,取出它的长度
        int firstLength = strs[0].length();
        //整个数组的长度
        int strsLength = strs.length;
        for(int i = 0; i < firstLength; i++){
            //取出第一个字符串的第i个字符
            char c = strs[0].charAt(i);
            //依次对每一个字符串的第i个字符进行比较
            for(int j = 1; j < strsLength; j++){
                //一旦i等于某个字符串的长度,说明这个字符串应该是公共部分
                //例如"abc","ab","abdc"
                //肉眼可以看出,ab是最长公共前缀,也就是说当程序循环到"abc"中的c的时候
                //发现"ab"的长度等于当前循环的次数,2=2,所以就返回这个"ab"
                //或者两个字符不相等
                if(i == strs[j].length() || strs[j].charAt(i) != c){
                    //substring方法是String类自带的方法,它的作用是截取一个字符串,
                    //变成一新的字符串
                    //而且传进入的参数是左闭右开,[)
                    //也就是程序的[0,i),包括0,不包括i
                    return strs[0].substring(0,i);
                }
            }
        }
        return strs[0];
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!