分析
-
本题的考点:字符串。
-
从字符串的第一个字符开始对比是不是所有字符串的对应字符都相同,相同的话继续考察下一个,不同的话返回结果。
代码
- C++
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string res;
if (strs.empty()) return res;
for (int i = 0; i < strs[0].size(); i++) {
char c = strs[0][i];
for (auto &s : strs)
if (i >= s.size() || s[i] != c)
return res;
res += c;
}
return res;
}
};
- Java
class Solution {
public String longestCommonPrefix(String[] strs) {
StringBuilder sb = new StringBuilder();
if (strs == null || strs.length == 0) return sb.toString();
for (int i = 0; i < strs[0].length(); i++) {
char c = strs[0].charAt(i);
for (String s : strs)
if (i >= s.length() || s.charAt(i) != c)
return sb.toString();
sb.append(c);
}
return sb.toString();
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为所有字符串的长度和。 -
空间复杂度:$O(m)$,
m
为所有字符串长度的最小值。