
背景本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。 本次任务的知识点:字符串 字符串或串(string) 是由数字、字母、下划线组成的一串字符。一般记为 s = “a1a2...an”(n >= 0) 。它是编程语言中表示文本的数据类型。 通常以串的整体作为操作对象,如:在串中查找某个子串在该串中首次出现的位置、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。串通常以顺序的方式进行存储与实现。
题目编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl"
示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母 a-z。
实现C# 语言 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 语言 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]
|