破防恢复期刷会算法,最长公共前缀可能是5年前刷的题了,再写一遍竟然想的复杂了,提交好几遍也不过。
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 仅由小写英文字母组成
正常解答
最长公共前缀的最大值为字符串数组中的最短字符,所以只需要查询一部分,不需要遍历完整个长度。比较暴力,看了一些题解还有很大改进空间,仅做参考。
class Solution {
public String longestCommonPrefix(String[] strs) {
String max = "";
int minLen = minStrLen(strs);
for (int i = 0; i < minLen; i++) {
char c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
if (c == strs[j].charAt(i)) {
continue;
} else {
return max;
}
}
max += c;
}
return max;
}
public int minStrLen(String[] strs) {
int min = strs[0].length();
for (int i = 1; i < strs.length; i++) {
if (min > strs[i].length()) {
min = strs[i].length();
}
}
return min;
}
}