Leecode刷题热题HOT100(14)——最长公共前缀

Leecode刷题HOT100系列文章目录

题号 描述 链接
001 两数之和 01-两数之和
002 两数相加 02-两数相加
003 最长无重复符号子串 03-最长无重复符号子串
004 寻找两个正序数组的中位数 04-寻找两个正序数组的中位数
006 Z 字形变换 Z 字形变换
007 整数反转 07-整数反转
009 回文数 09-回文数
014 最长公共前缀 014-最长公共前缀
n 未完待续 持续更新

题目

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

解题思路

方法一

辅助方法:求两个字符串的最长公共前缀
首先定义一个辅助方法,作用是求出两个字符串的最长公共前缀,思路是从i=0开始,比较字符串s1[i]与s2[i]是否相同,如果相同,则公共前缀result追加s1[i],碰到s1[i]不等于s2[i]时退出循环,若i=min(s1.size(),s2.size()),即有一个字符串被遍历到最后一个字符时,结束循环。
字符串数组两两求最长公共前缀,得到的结果作为新的字符数组再两两求最长公共前缀,直到得到的新的字符数组只有一个元素,即所有元素最长公共前缀
在这里插入图片描述

我的答案

class Solution {
    
    
public:
    string longestCommonPrefixBetweenTwo(string &s1,string &s2){
    
    
        int len = s1.size()>s2.size()?s2.size():s1.size();
        string result = "";
        for(int i = 0;i<len;i++) {
    
    
            if(s1[i] == s2[i]){
    
    
                result+=s1[i];
            } else {
    
    
                break;
            }
        }
        return result;
    } 
    string longestCommonPrefix(vector<string>& strs) {
    
    
        int len = strs.size();
        while(len!=1) {
    
    
            int i = 0;
            for(i=0;i<strs.size()-1;i+=2){
    
    
                strs[i/2] = longestCommonPrefixBetweenTwo(strs[i],strs[i+1]);
            }
            if(len%2!=0) {
    
    
                strs[len/2] = strs[len-1];
                len = len +1;
            }
            len = len / 2;
        }
        return strs[0];
    }
};

优质解答

class Solution {
    
    
public:
    string longestCommonPrefix(vector<string>& strs) {
    
    
        if (!strs.size()) {
    
    
            return "";
        }
        string prefix = strs[0];
        int count = strs.size();
        for (int i = 1; i < count; ++i) {
    
    
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (!prefix.size()) {
    
    
                break;
            }
        }
        return prefix;
    }

    string longestCommonPrefix(const string& str1, const string& str2) {
    
    
        int length = min(str1.size(), str2.size());
        int index = 0;
        while (index < length && str1[index] == str2[index]) {
    
    
            ++index;
        }
        return str1.substr(0, index);
    }
};

知识积累


生活最佳状态是冷冷清清地风风火火。——木心

如果本篇文章对您有所帮助,就请帮我点个赞吧!!!

猜你喜欢

转载自blog.csdn.net/mataojie/article/details/121803443