返回
一叶障目不见泰山——《每日一道算法题005 最长公共前缀》破解思路
Android
2023-09-17 00:42:52
前言
算法题是程序员的必修课,也是面试官考察候选人编程能力的重要手段。每日一道算法题系列文章旨在帮助读者提高算法题解题能力。
题目
给定一个字符串数组,找到所有字符串中最长的公共前缀。如果不存在公共前缀,则返回空字符串 ""。
示例 1:
输入:strs = ["flower", "flow", "flight"]
输出:"fl"
示例 2:
输入:strs = ["dog", "racecar", "car"]
输出:""
示例 3:
输入:strs = ["flower", "flower", "flower", "flower"]
输出:"flower"
我的解题思路
这道题可以有多种解法,我使用的是比较暴力的破解方法,直接进行双循环对比,然后拼接返回结果。
- 首先,我将字符串数组中的所有字符串都转成小写,这样可以避免大小写不同的情况。
- 然后,我从第一个字符串开始,逐个字符地与其他字符串进行比较。
- 如果遇到不匹配的字符,则我将前缀字符串截取到不匹配字符的前一个字符,并返回。
- 如果所有字符串都比较完了,都没有遇到不匹配的字符,则我将前缀字符串返回。
代码实现
def longestCommonPrefix(strs):
# 将所有字符串转成小写
strs = [s.lower() for s in strs]
# 初始化前缀字符串
prefix = ""
# 逐个字符地比较字符串
for i in range(len(strs[0])):
char = strs[0][i]
# 如果遇到不匹配的字符,则截取前缀字符串并返回
if any(s[i] != char for s in strs):
return prefix
# 否则,将字符添加到前缀字符串中
else:
prefix += char
# 如果所有字符串都比较完了,都没有遇到不匹配的字符,则返回前缀字符串
return prefix
# 测试代码
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix(strs)) # "fl"
strs = ["dog", "racecar", "car"]
print(longestCommonPrefix(strs)) # ""
strs = ["flower", "flower", "flower", "flower"]
print(longestCommonPrefix(strs)) # "flower"
结语
以上就是我解决《每日一道算法题005 最长公共前缀》的思路和方法。希望对大家有所帮助。