仅做学习笔记之用。
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
思路是这样的:
假设有两个子串,那么最长公共子串再长,那也是短的那个。
首先检查数组是否为空,然后确定短的字符串,然后直接遍历那个短的,检查在其他字符串的相同位置是否是一样的字符。
如果能一路到底,有两种情况:这条最短字符串就是答案,或者压根找不到了。
代码如下:
public class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
int minLen = Integer.MAX_VALUE;
for (String str : strs) {
if (str != null && str.length() < minLen) {
minLen = str.length();
}
}
StringBuilder prefix = new StringBuilder();
int i = 0;
while (i < minLen) {
char c = strs[0].charAt(i);
boolean isCommon = true;
for (int j = 1; j < strs.length; j++) {
if (strs[j].charAt(i) != c) {
isCommon = false;
break;
}
}
if (isCommon) {
prefix.append(c);
i++;
} else {
break;
}
}
return prefix.toString();
}
}
(算法大佬英雄哪里出来曾曰:过——啦)
解决。