14. Longest Common Prefix
题目大意
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
中文释义
编写一个函数,在字符串数组中找到最长的公共前缀字符串。
如果没有公共前缀,则返回一个空字符串 “”。
Example
Example 1:
Input: strs = [“flower”,“flow”,“flight”]
Output: “fl”
Example 2:
Input: strs = [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.
Constraints
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] consists of only lowercase English letters.
解题思路
要找到字符串数组中的最长公共前缀,可以采用以下步骤:
-
首先,检查输入的字符串数组
strs
是否为空,如果为空则直接返回空字符串""
。 -
对字符串数组
strs
进行排序,以确保相同前缀的字符串排在一起。排序后的数组中,第一个字符串strs[0]
将成为可能的公共前缀。 -
初始化一个字符串
prefix
,将其设置为strs[0]
,作为初始可能的公共前缀。 -
从数组的第二个字符串开始遍历,即从
strs[1]
到strs[n-1]
,其中n
是数组的大小。 -
在每次遍历中,使用
while
循环检查当前字符串strs[i]
是否以prefix
作为前缀,通过strs[i].find(prefix)
的结果来判断。如果不是前缀,则将prefix
截断一个字符,即prefix = prefix.substr(0, prefix.length() - 1)
,然后继续检查。循环会一直执行,直到找到strs[i]
的前缀或prefix
变为空字符串。 -
重复步骤4和步骤5,直到遍历完整个数组。
-
返回
prefix
作为最长的公共前缀。
这个算法通过排序和逐步截断前缀的方式,找到字符串数组中的最长公共前缀。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) return "";
sort(strs.begin(), strs.end());
string prefix = strs[0];
for (int i = 1; i < strs.size(); i++) {
while (strs[i].find(prefix) != 0) {
prefix = prefix.substr(0, prefix.length() - 1);
if (prefix.empty()) return "";
}
}
return prefix;
}
};