14. 最长公共前缀

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

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

示例 1:

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

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

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

解题思路及方法

挺简单的一道题,首先字符串数组长度小于等于1,直接返回它第一个元素。然后说下我的思路,我将首字符串作为参照字符串跟剩下的每一个字符串作比较,从首字符串的首位开始,只要有一位相同,就count++,然后继续判定,然后只要第一次遇见不相同,就break,开始首字符串跟下一个字符串比较。
用一个list记录首字符串跟剩下每一个字符串公共字符的个数,只要list里面有0元素,就说明至少有一个字符串跟首字符串没有公共前缀,返回空。否则就找到list里面最小的值,将首字符串的0-minLen赋给res,返回res。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length <= 1) {
            return strs[0];
        }
        // 初始值
        String res = strs[0];
        List list = new ArrayList<>();
        for (int i = 1; i < strs.length; i++) {
            // 获取两者最短长度
            int len = Math.min(res.length(), strs[i].length());
            int count = 0;
            for (int j = 0; j < len; j++) {
                if (res.charAt(j) == strs[i].charAt(j)) {
                    count++;
                } else {
                    break;
                }
            }
            list.add(count);
        }
        // 判断是否有公共前缀
        if (list.contains(0)) {
            return "";
        } else {
            int minLen = Collections.min(list);
            res = res.substring(0, minLen);
        }

        return res;
    }
}

结果如下:

你可能感兴趣的:(14. 最长公共前缀)