题设
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例
输入:strs = ["flower","flow","flight"]
输出:"fl"
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
注意
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
题解
解题思路
整体思路以第一个字符串为起始,依次同每一个字符串比较公共前缀,保留公共前缀的结果返回,返回结果与后一个字符串继续比较,直至strs数组结束
- 首先排除strs[]为null和为空的情况
- 将第一个字符串拟定为初始比较值
- 从第二个开始依次比较,结果为新的最长公共前缀
- 剪枝:如果某一个循环结果为空直接退出循环
代码
public static String longestCommonPrefix(String[] strs) {
//剔除strs为null和为空的情况
if(strs==null || strs.length==0)return "";
int len = strs.length;
//将第一个字符串拟定为初始比较值
String result = strs[0];
//从第二个开始依次比较,结果为新的最长公共前缀
for (int i = 1; i < len ; i++) {
//剪枝:如果某一个循环结果为空直接退出循环
if (result.equals("")){
break;
}
result = compareStrs(result,strs[i]);
}
return result;
}
//比较两个字符串的公共前缀
public static String compareStrs(String s,String t){
int len = s.length() >= t.length() ? t.length():s.length();
//如果其中一个为空,直接返回空串
if(len == 0){
return "";
}
//记录公共串长度
int count = 0;
for (int i = 0; i < len; i++) {
if(s.charAt(i) == t.charAt(i)){
count++;
}else {
break;
}
}
//根据count情况确定公共前缀的情况
if (count==s.length())
return s;
else if (count == t.length())
return t;
else if(count == 0)
return "";
else
return s.substring(0,count);
}