题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
思路:水平扫描法
依次取第一个字符串中的元素a[0][i] (索引为i),遍历所有字符串,判断是否全部字符串中索引i位置上的元素是否与a[0][i]一致即可。
c
char * longestCommonPrefix(char ** strs, int strsSize){
if(strsSize==0) return "";
int index=0,j;
while(1){
for(j=0;j<strsSize;j++)
if (strs[j][index]!=strs[0][index]||strs[j][index]==0) break;
if (j==strsSize) index++;
else break;
}
char s[index+1];
for (j=0;j<index;j++)
s[j]=strs[0][j];
s[index]=0;
char* str=s;
return str;
}
c++
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty())
return "";
//1、找出最小的字符串长度
int min_size = strs.at(0).size();
int min_str_index = 0;
for (int i = 1; i < strs.size(); ++i)
{
if (strs.at(i).size() < min_size)
{
min_size = strs.at(i).size();
min_str_index = i;
}
}
//比较前min_size个字符是否都相等,只要有不相等的即返回
int i = 0;
for (; i < min_size; ++i)
{
char tmp = strs.at(0).at(i);
for (int j = 1; j < strs.size(); ++j)
{
if (strs.at(j).at(i) != tmp)
return string(strs.at(min_str_index).c_str(), i);
}
}
return string(strs.at(min_str_index).c_str(), min_size);
}
python
利用python内置函数
class Solution:
def longestCommonPrefix(self, s: List[str]) -> str:
if not s:
return ""
res = s[0]
i = 1
while i < len(s):
while s[i].find(res) != 0:
res = res[0:len(res)-1]
i += 1
return res
java
扫描二维码关注公众号,回复:
8788237 查看本文章
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) return "";
for (int i = 0; i < strs[0].length() ; i++){
char c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j ++) {
if (i == strs[j].length() || strs[j].charAt(i) != c)
return strs[0].substring(0, i);
}
}
return strs[0];
}