classsolution(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
(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...