目录
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
C++代码:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:9 MB, 在所有 C++ 提交中击败了46.26%的用户
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() < 1) return "";
if (strs.size() == 1) return strs[0]; // 只有一个字符串
// 不止一个字符串,则以第一个字符串为准,每个字符串都依次与第一个字符串进行比较,看前缀是否相等.
for (int i = 0; i < strs[0].size(); i++) // 遍历第一个字符串的每个字符
{
// 在比较的位置相同的情况下, 依次与其他字符串在相同的位置处进行比较
int m = 1;
while (m < strs.size())
{
if (strs[m][i] == strs[0][i]) // 当前位置相同,则比较下一个字符串
{
m++;
}
// else break; // 单纯的跳出内层循环不行,外层会继续,i会累加。
else return strs[0].substr(0, i); // 否则不同,则返回结果。
}
}
return strs[0]; // 前面没有返回,则说明其他所有字符串都与第一个字符串长度相等,每个字符相等,一直比较到末尾
}
};
c++代码:
思路:依次和第一个字符串比较,在所有字符串不越界,字符且相等的前提下,拼接当前字符。
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:8.8 MB, 在所有 C++ 提交中击败了91.60%的用户
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int str_len = strs.size();
if (str_len == 1) return strs[0];
string com_str = "";
for (int i = 0; i < strs[0].size(); i++) // 依次和第一个字符串的比较
{
// 判断长度是否越界
for (int j = 1; j < str_len; j++) // 依次判断所有字符串是否越界
{
if (i >= strs[j].size()) // 是否越界
{
return com_str;
}
}
// 不越界,则判断其他字符串的字符是否和第一个字符串的字符相等
for (int j = 1; j < str_len; j++)
{
if (strs[0][i] != strs[j][i])
{
return com_str;
}
}
// 不越界,且都相等
com_str += strs[0][i];
}
return com_str;
}
};
python代码:
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
strs_len = len(strs)
if strs_len == 1: return strs[0]
# 依次和第一个字符串的所有字符比较。
com_str = ""
for i in range(len(strs[0])): # 遍历第一个字符串的所有字符
# 其他字符串是否越界
for j in range(strs_len): # 依次遍历其他字符串
if i >= len(strs[j]):
return com_str
# 其他字符串的当前字符是否相等
for j in range(strs_len):
if strs[0][i] != strs[j][i]:
return com_str
# 其他字符串的不越界,且当前字符相等,则拼接
com_str = com_str + strs[0][i]
return com_str