好久没刷leetcode了,上次刷还是大三暑假刷的,当时找工作很心急,并没有静下心来写,匆匆忙忙的刷了四十道,效果并不好。现在研一,希望能够静下心来一天一道,打好基础。之前用的c++写的,c++里面有指针,很方便,也很难,很多人都说面试用c++写是给自己挖了一个坑,我最近用python比较多,所以打算用python刷
奉上我的代码
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if(len(strs)==0):
return ""
flag=0
temp=""
i=0
minLen=len(strs[0])
print(minLen)
for str in strs:
if(len(str)<minLen):
minLen=len(str)
if(minLen==0):
return ""
for i in range(minLen):
temp=strs[0][0:i+1]
for str in strs:
if(str[0:i+1]==temp):
continue
else:
flag=1
break
if(flag==1):
break
i+=1
return temp[0:i]
教训:如果发现需要跳出两层循环的时候,用flag标记一下可以解决
我的想法是:
1、先判断是否是空的数组,即判断len(strs)的长度,如果是0就返回“”
2、求出整个字符串最短的那个长度,如果有空的字符串,最短长度肯定也是0,返回“”
3、接下来是两层循环,外层循环是从0到最短字符串长度(最长公共子串最多是最短字符串长度),,用一个字符串首先存下来第一个字符串的第一个字母,内层循环是一个个遍历字符串,比较第一个字母是否和存下来的一样,一样的话比较第二个,如果有不一样,就跳出,标记flag为1,最后返回一样的字符。
我刚开始没用flag标记,一直考虑如果出现else的情况,怎样跳出两层循环(经常会碰到这种情况),后来百度到用flag,希望以后能吸取到这个教训