打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

背景

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

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

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

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


题目

  • 题号:14

  • 难度:简单

  • https://leetcode-cn.com/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]

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
​LeetCode刷题实战14: 最长公共前缀
【小Y学算法】⚡️每日LeetCode打卡⚡️——10.最长公共前缀
leetcode
# 02 公共前缀问题
「算法总结」13 道题搞定 BAT 面试——字符串
java中字符串的操作汇总
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服