编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 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<Integer> 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;
}
}
结果如下: