leetcode题解(3)

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

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

示例 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];
}
发布了15 篇原创文章 · 获赞 33 · 访问量 3290

猜你喜欢

转载自blog.csdn.net/a13352912632/article/details/104072835
今日推荐