问题链接
LeetCode 14. Longest Common Prefix
题目解析
求字符串数组的最长公共前缀。
解题思路
拍头一想可以想到直接暴力求解,仔细一想会不会有坑。想了半天没有想到什么好方法后,决定暴力一波,没想到过了,确实是简单题啊~
外循环表示列,即每个字符串第几个字符,内循环表示行,即第几个字符串。因为最长前缀不可能超过数组中最短的字符串,当遇到字符串结尾或者字符不相等时,即可返回答案。
注意字符串数组为空的情况下直接返回。
参考代码
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) return "";
string res = "";
for (int i = 0; i < strs[0].size(); i++) {
char c = strs[0][i];//每列首字母
for (int j = 0; j < strs.size(); j++) {
if (i == strs[j].size() || strs[j][i] != c)
return res;
}
res += c;
}
return res;
}
};
精简版
思路是一样的,不过不需要额外的变量了,返回时直接利用 substr 返回子串。参考代码:
class Solution {
public:
string longestCommonPrefix(vector<string> &strs) {
if (strs.empty()) return "";
if (strs.size() == 1) return strs[0];
for (int i = 0; i < strs[0].size(); i++) {
for (int j = 0; j < strs.size()-1; j++) {
if (i >= strs[j+1].size() || strs[j][i] != strs[j+1][i])
return strs[j].substr(0,i);
}
}
return strs[0];
}
};
官方解法
https://leetcode.com/problems/longest-common-prefix/solution/。虽然有些简单问题复杂化,但分析过程和训练效果非常好,涉及到分治等思想,可以稍微看一看。
LeetCode All in One题解汇总(持续更新中...)
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.