南宁网站开发建设,wordpress主机空间选择,建筑工程网站定制,公司门户网站是什么14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀#xff0c;返回空字符串 。
示例 1#xff1a;
输入#xff1a;strs [flower,flow,flight]
输出#xff1a;fl示…14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀返回空字符串 。
示例 1
输入strs [flower,flow,flight]
输出fl示例 2
输入strs [dog,racecar,car]
输出
解释输入不存在公共前缀。
一开始觉得难的地方是在字符串数组里循环字符串然后再挨个比较字符串里面的字母是否相同后来find函数——检测字符串中是否包含子字符串 str
str1.find(str, beg0, endlen(string))返回值默认是0如果没找到返回-1因此只要选择list中任意一个字符串作为子字符串循环检索list每个字符串比较要注意比较如果没有就让子字符串从后面-1此时不去检索下一个而是一直循环在这个字符串上接着find直至找到相同的部分因为是公共的必须满足每一个都找到相同的
法一
class Solution:def longestCommonPrefix(self, strs: List[str]) - str:if not strs:return resstrs[0]#先res第一个字符串for i in range(1,len(strs)):while strs[i].find(res)!0:resres[0:len(res)-1]#如果没找到就减一个i1return res
法二字符串sort后 字典中以最小和最大的相同位置字符进行比较循环终止条件是遇到不想等的字符或者是到达某一个字符串的末尾
class Solution:def longestCommonPrefix(self, strs: List[str]) - str:if not strs:return strs.sort()firststrs[0]laststrs[-1]reslengthlen(first)for i in range(length):if ilength and first[i]last[i]:resfirst[i]else:breakreturn res
字符串相加是字符串else:break必须因为是从前向后检索有不相同那么后面所有都不相同就不用for往后循环了
法三python的zip函数将列表对象打包为元组按列组合enumerate在回文数中用于遍历列表或者元组、字符串的下标和元素
class Solution:def longestCommonPrefix(self, strs: List[str]) - str:if not strs:return for i, str in enumerate(zip(*strs)):if len(set(str))1:#str为字符串按列组合——下标相同set是组成集合过滤重复元素如果1是都相同如果1则对应相同下表的字符不相同return strs[0][0:i]return min(strs)
*strs使用解包操作符把strs元素拆分册灰姑娘多个单独的参数zip把相同位置的字符打包成元组for中如果有字符不相同就返回strs中任意一个字符串的前i-1个元素如果没有就返回长度最小的一定是公共的