您的位置:首页 > 其它

LeetCode 14. 最长公共前缀

2019-03-27 01:18 357 查看

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 

""

示例 1:

[code]输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

[code]输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 

a-z
 。

问题分析

先判断数组的大小,如果为0则说明数组为空,返回 ""。然后判断数组中所有的字符串最短的长度min_len,然后判断min_len如果等于0,则说明最小长度为0,也返回 ""。这时代码执行到这里,数组中至少有一个字符串,且最短长度大于0。这时进入for循环,从公共子串长度为1开始,依次将各个字符串的该长度的子串与第一个字符串该长度的字串比较,如果不相等则返回上一个长度的子串。如果循环结束、中途没有返回,说明在min_len长度内所有字符串都完全相同,返回min_len长度的第一个子串即可。到这里,程序是肯定结束的。所以实际上最后的return ""; ,实际上是执行不到的。

代码实现

[code]class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int min_len = INT_MAX;
if(strs.size() == 0)
return "";
for(int i = 0; i < strs.size(); i++)
if(strs[i].size() < min_len)
min_len = strs[i].size();
if(min_len == 0)
return "";
int s = 1;
string temp;
for(; s <= min_len; s++){
temp = strs[0].substr(0, s);
for(int j = 0; j < strs.size(); j++)
if(strs[j].substr(0, s) == temp)
continue;
else
return strs[0].substr(0, s - 1);
}
if(s == min_len + 1)
return strs[0].substr(0, min_len);
return "";
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: