【LeetCode-字符串】最长公共前缀

题目描述

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

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

示例

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

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

题目链接: https://leetcode-cn.com/problems/longest-common-prefix/

思路1

首先找到最短的字符串,然后遍历最短的字符串,将当前位和其余字符串作比较:如果其余字符串的当前位和最短字符串的当前位全部相等,则比较下一位;如果有一个不相等,则循环终止,从字符串开始位置到当前位置的前一位就是最长的公共前缀(其实不需要根据最短字符串进行比较,随便找一个字符串作为基准比较就行了)。代码如下:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";

        int shortest = 0x7fffffff;
        string shortestStr = "";
        for(int i=0; i<strs.size(); i++){
            if(strs[i].length()<shortest){
                shortest = strs[i].length();
                shortestStr = strs[i];
            }
        }

        int i=0;
        while(i<shortest){
            bool breakFlag = false;
            for(int j=0; j<strs.size(); j++){
                if(strs[j][i]!=shortestStr[i]){
                    breakFlag = true;
                    break;
                }
            }
            if(breakFlag) break;
            i++;
        }
        return shortestStr.substr(0,i);
    }
};
  • 时间复杂度:O(n)

    n是字符串数组的长度。最坏情况下为O(n*m),其中m是最短字符串的长度。

  • 空间复杂度:O(1)

思路2

首先选择一个字符串当做目前的前缀,不妨选第一个,然后判断目前的前缀是否是第二个字符串的前缀:如果不是,则将当前的前缀最后一个字符去掉,如果去掉后当前前缀为空,则直接返回;如果去掉后不为空且是第二个字符串的前缀;那么继续通过同样的方法比较第三个字符串,直至比较一遍或者前缀为空,如果比较结束后,当前前缀不为空,则当前前缀就是最长的公共前缀。代码如下:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";

        string prefix = strs[0];
        for(int i=1; i<strs.size(); i++){
            while(strs[i].find(prefix)!=0){    // prefix不是strs[i]的前缀
                prefix = prefix.substr(0, prefix.length()-1);
                if(prefix.empty()) return prefix;
            }
        }
        return prefix;
    }
};
  • 时间复杂度:O(n)

    n为字符串数组的长度。

  • 空间复杂度:O(1)

原文地址:https://www.cnblogs.com/flix/p/12686641.html

时间: 2024-08-01 05:05:48

【LeetCode-字符串】最长公共前缀的相关文章

LeetCode:最长公共前缀【14】

LeetCode:最长公共前缀[14] 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存

LeetCode 14. 最长公共前缀(Longest Common Prefix)

14. 最长公共前缀 14. Longest Common Prefix 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". LeetCode14. Longest Common Prefix 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racec

LeetCode 7最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字母 a-

leetcode 13.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 1 class Solution: 2 def longestCommonPrefix(self, strs): 3 """ 4 :type strs: List[str] 5 :rtype: str 6 """ 7 if len(strs) == 0: 8 return "" 9 if len(strs) == 1:

python(leetcode)-14最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字母 a-

[leetcode 14] 最长公共前缀

写一个函数可以查找字符串中的最长公共字符. 示例: 输入:["flower","flow","flight"] 输出:"fl" 输入:["dog","racecar","car"] 输出:" " (不存在公共的字符串) 代码: class Solution: def longestCommonPrefix(self,strs): "&qu

[转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀

题记: 这道题不难但是很有意思,有两种解题思路,可以说一种是横向扫描,一种是纵向扫描. 横向扫描:遍历所有字符串,每次跟当前得出的最长公共前缀串进行对比,不断修正,最后得出最长公共前缀串. 纵向扫描:对所有串,从字符串第0位开始比较,全部相等则继续比较第1,2...n位,直到发生不全部相等的情况,则得出最长公共前缀串. 横向扫描算法实现: //LeetCode_Longest Common Prefix //Written by zhou //2013.11.22 class Solution

LeetCode -- 求字符串数组中的最长公共前缀

题目描写叙述: Write a function to find the longest common prefix string amongst an array of strings.就是给定1个字符串数组,找出公共最长前缀. 思路非常直接.使用1个索引来存最长公共前缀的长度就能够了. 注意, 假设使用1个字符串变量来存前缀的话,是不能AC的,由于题目不同意使用额外的空间. public string LongestCommonPrefix(string[] strs) { if(strs

leetcode——Longest Common Prefix 最长公共前缀(AC)

Write a function to find the longest common prefix string amongst an array of strings. 其实做起来会感觉很简单,需要注意的是要考虑效率的问题,毕竟可能是很长的字符串数组,所以可以考虑选取所有字符串中最短的那个来首先进行比较,因为最长公共子串肯定不会大于其长度,这样避免了字符串之间长度差异很大造成的效率损失,然后每次比较之后最长公共子串的长度也永远不会大于最短的那个字符串,只会不变或减小,只要遍历字符串数组,挨个

# Leetcode 14:Longest Common Prefix 最长公共前缀

公众号:爱写bug Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string "". 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". Example 1: Input: ["flower"