The Night Day最長公共字首

2022-04-09 22:01:57 字數 2705 閱讀 7787

class

solution(object):

"""編寫乙個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 1:

輸入: ["flower","flow","flight"]

輸出: "fl"

示例 2:

輸入: ["dog","racecar","car"]

輸出: ""

解釋: 輸入不存在公共字首。

說明:所有輸入只包含小寫字母 a-z 。

""""""

@author : jiyanjiao

@date :2020-4-7

"""#

基本解法

list_fist_al =

list_als =

st =

flag = 0 #

當子字串最小的元素驗證後,標記flag跳出迴圈

deflongestcommonprefix(self, strs):

"""將傳入的列表中的字串均變成列表

:type strs: list[str]

:rtype: str

"""#

存入新生成的列表

list_items =

for i in

range(len(strs)):

list_item =list(strs[i])

i += 1

#獲取列表中子列表的第乙個字元

self.list_p(list_items)

#判斷自列表中的第乙個字元是否相同,相同繼續迴圈,取各個自列表的第二個字元

while len(self.list_set(self.list_als)) !=0:

self.list_p(list_items)

if self.flag == 1:

break

if len(self.st) !=0:

print("

最大公共字串為:

", ''

.join(self.st))

else

:

print("

輸入不存在公共字首")

deflist_set(self, lst):

"""判斷列表中的元素是否是一樣的

:param lst:

:return:

"""for i in range(len(lst)-1, len(lst)):

#使用set集合去重,如果有唯一的元素證明整個列表元素相同

list_set =set(lst[i])

if len(list_set) == 1:

else

:

break

i += 1

return

self.st

deflist_p(self, list_items):

"""使用佇列開始比較列表中的第乙個字元

:param list_items:

:return:

"""self.list_fist_al =

for i in

range(len(list_items)):

#將每輪的第乙個字元存入到乙個列表中

if len(list_items[i]) ==0:

self.flag = 1

break

i += 1

#將每輪迴圈的第乙個字元列表在加入乙個列表中

return

self.list_als

注:以上是從功能層面實現了(思路是對的),後來參考其他作者挖掘出python的乙個函式直接搞定那就是zip,讓我們一起看一下實現的**吧

"""

思路二:

zip(*st rs)函式將列表變換成元組。然後使用集合set的互異性,判斷set後的元組⻓度等於1,等於1則認為該字元是公共字首,加入公共字首字串

""""""

zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。

"""def

longestcommonprefix1(self, strs):

s = ""

for i in zip(*strs):

if len(set(i)) == 1:

s +=i[0]

else

:

break

print

(s)

return s

if

__name__ == '

__main__':

s =solution()

ls_n = ["

dog", "

racecar

", "

car"

] ls = ["

flower

", "

flow

", "

flight

", "

fly"

] s.longestcommonprefix(ls)

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...

最長公共子串 最長公共子串行

子串要求連續 子串行不要求連續 之前的做法是dp求子序列 include include include using namespace std const int inf 0x3f3f3f3f const int mod 1000000007 string s1,s2 int dp 1010 10...