题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
输入和输出
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
提示
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 仅由小写英文字母组成
思路
如果我们可以将字符串排序,那么我们只需要判断第一个字符串和最后一个字符串的公共前缀,因为最长公共前缀依赖与第一个字符串和最后一个字符串,而中间的字符串不会影响。
AC代码(C++)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
sort(strs.begin(), strs.end());
string first = strs.front();
string end = strs.back();
string res = "";
for (int i = 0; i < first.size() && i < end.size(); ++i) {
if (first[i] != end[i]) {
break;
}
res += first[i];
}
return res;
}
};
AC代码(Java)
class Solution {
public String longestCommonPrefix(String[] strs) {
Arrays.sort(strs);
String first = strs[0];
String end = strs[strs.length - 1];
String res = "";
for (int i = 0; i < first.length() && i < end.length(); ++i) {
if (first.charAt(i) != end.charAt(i)) {
break;
}
res += first.charAt(i);
}
return res;
}
//Array.sort(strs)是默认的排序,可以选择排序区间。
}
AC代码(Python)
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
strs.sort()
first, end = strs[0], strs[-1]
i, res = 0, ""
while i < len(first) and i < len(end):
if first[i] != end[i]:
break
else:
res += first[i]
i += 1
return res
//strs.sort()对原有的列表进行排序,原表发生改变,而sorted(strs)函数会返回一个对象。