分享

刻意练习:LeetCode实战 -- Task14. 最长公共前缀

 老马的程序人生 2020-08-17

背景

本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。

本次任务的知识点:字符串

字符串或串(string) 是由数字、字母、下划线组成的一串字符。一般记为 s = “a1a2...an”(n >= 0)。它是编程语言中表示文本的数据类型。

通常以串的整体作为操作对象,如:在串中查找某个子串在该串中首次出现的位置、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。串通常以顺序的方式进行存储与实现。


题目

  • 题号:14

  • 难度:简单

  • https:///problems/longest-common-prefix/

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

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

示例 1:

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

示例 2:

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

说明:

所有输入只包含小写字母 a-z。


实现

C# 语言

  • 状态:通过

  • 118 / 118 个通过测试用例

  • 执行用时: 144 ms, 在所有 C# 提交中击败了 94.92% 的用户

  • 内存消耗: 23.4 MB, 在所有 C# 提交中击败了 11.69% 的用户
public class Solution {
    public string LongestCommonPrefix(string[] strs) {
        if (strs.Length == 0)
            return string.Empty;

        string result = strs[0];
        for (int i = 1; i < strs.Length; i++)
        {
            result = Prefix(result, strs[i]);
            if (string.IsNullOrEmpty(result))
                break;
        }
        return result;        
    }

    public string Prefix(string str1, string str2)
    
{
        int len1 = str1.Length;
        int len2 = str2.Length;
        int len = Math.Min(len1, len2);
        int i = 0;
        for (; i < len; i++)
        {
            if (str1[i] != str2[i])
                break;
        }
        return i == 0 ? string.Empty : str1.Substring(0, i);
    }    
}

Python 语言

  • 执行结果:通过

  • 执行用时:44 ms, 在所有 Python3 提交中击败了 35.93% 的用户

  • 内存消耗:13.6 MB, 在所有 Python3 提交中击败了 5.14% 的用户
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if len(strs) == 0:
            return ""
        result = strs[0]
        for i in range(len(strs)):
            result = self.Prefix(result, strs[i])
            if result == "":
                break
        return result

    def Prefix(self, str1: str, str2: str) -> str:
        len1, len2 = len(str1), len(str2)
        i = 0
        while i < min(len1, len2):
            if str1[i] != str2[i]:
                break
            i += 1
        return "" if i == 0 else str1[0:i]

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多