14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 如果非空,则仅由小写英文字母组成
Python 的题解
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs: return ""
str0 = min(strs)
str1 = max(strs)
for i in range(len(str0)):
if str0[i] != str1[i]:
return str0[:i]
return str0
这里面有个很巧妙的地方,min()和max()函数是字典排序,字典序(lexicographical order)是指按照字母顺序排列字符串的一种方式,类似于字典中词语的排列顺序。在字典序中,字符串按照每个字符的 Unicode 值进行比较,从左到右逐个字符进行比较,直到发现差异为止。
具体规则:
- 从左到右逐字符比较:字典序比较是按字符的顺序进行的,即从第一个字符开始,逐个比较。
- 按字符的 Unicode 值排序:字符的 Unicode 值决定了它们的排序。例如,'a' 的 Unicode 值比 'b' 小,因此 'a' 在字典序中排在 'b' 前面。
- 长度较短的字符串排在前面:如果两个字符串的前缀相同,则较短的字符串排在前面。例如,"apple" 会排在 "applepie" 前面。
示例:
- "apple" < "banana" < "cherry",因为 'a' 小于 'b','b' 小于 'c'。
- "a" < "apple",因为 "a" 是 "apple" 的前缀且较短。
- "abc" < "abd",因为在前三个字符相同的情况下,'c' 小于 'd'。
Python 中的字典序
在 Python 中,字符串的比较操作符(如 <,>, ==)就是基于字典序来进行的。因此,使用 min() 和 max() 函数时,Python 会根据字典序来确定最小值和最大值。
例如:
words = ["apple", "banana", "cherry"]
print(min(words)) # 输出 'apple',
因为它在字典序中排在最前面 print(max(words)) # 输出 'cherry',因为它在字典序中排在最后面
总结来说,字典序就是按照字母表的顺序对字符串进行排序的方式。
LeetCode14