鍍金池/ 問(wèn)答/Python  網(wǎng)絡(luò)安全  HTML/ leetcode 最長(zhǎng)公共前綴,代碼運(yùn)行問(wèn)題

leetcode 最長(zhǎng)公共前綴,代碼運(yùn)行問(wèn)題

leetcode上有一道最長(zhǎng)公共前綴的問(wèn)題,想換一種方式解,然而打出來(lái)的是:
fl
fl
flo
為何print會(huì)出來(lái)3個(gè)結(jié)果?

class Solution:

def inter_prefix(self,strs=list,minPrefix=str):
    if minPrefix == '': return minPrefix

    for i in range(len(strs)):
        mi = strs[i][:len(minPrefix)]
        if minPrefix != mi:
            minPrefix = minPrefix[:-1]
            self.inter_prefix(strs, minPrefix)
    print(minPrefix)
def longestCommonPrefix(self, strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    if not strs: return ''
    minPrefix = strs[0]
    # if len(strs) == 1:return (minPrefix)
    for i in range(len(strs)):
        if len(minPrefix) > len(strs[i]):
            minPrefix = strs[i]
    self.inter_prefix(strs,minPrefix)

if name == '__main__':

Solution().longestCommonPrefix(["flower","flow","flight"])
回答
編輯回答
陌離殤

因?yàn)槟闶褂昧诉f歸,函數(shù)返回的時(shí)候由內(nèi)向外print。

總結(jié)下你的思路可以這樣寫(xiě)。

def longest_common_prefix(strs):
    if not strs:
        return ''
    # 先選出一個(gè)最短字符串作為前綴
    prefix = min(strs, key=lambda s:len(s))
    while True:
        for i in strs:
            # 如果存在前綴不滿足的字符串,則前綴縮減一個(gè)尾字符,且重新開(kāi)始循環(huán)判斷
            if not i.startswith(prefix):
                prefix = prefix[:-1]
                break
        # 如果都滿足則跳出while循環(huán)
        else:
            break
    return prefix
2017年1月14日 07:06