暴力二重循環,由於 words 長度小於 100,確定不會超時,可是注意每次找到了子串要 break,不然可能有重複。html
class Solution: def stringMatching(self, words: List[str]) -> List[str]: ans = [] for i in range(len(words)): for j in range(len(words)): if i == j: continue if words[i] in words[j]: ans.append(words[i]) break return ans
這題沒有想到好的解法,直接寫了最普通的模擬,本地試了下,還挺快的,應該會有更好的辦法吧。python
class Solution: def processQueries(self, queries: List[int], m: int) -> List[int]: m = min(m, max(queries)) p = [i+1 for i in range(m)] ans = [] for x in queries: i = p.index(x) ans.append(i) x = p.pop(i) p.insert(0, x) return ans
這題對於 python 來講形同虛設。我直接用了替換函數,注意 python 的字符串是不可變類型,每次生成新對象。數組
class Solution: def entityParser(self, text: str) -> str: text = text.replace('"', '"') text = text.replace(''', '\'') text = text.replace('&', '&') text = text.replace('>', '>') text = text.replace('<', '<') text = text.replace('⁄', '/') return text
感謝評論去兩位同窗指正,這個代碼若是 遇到 &gt;
輸出的結果是 >
,可是這個其實是把 &
轉義出的 &
和 gt;
組合了,因此代碼能夠把 text = text.replace('&', '&')
放到最後一句以來避免,代碼以下:app
class Solution: def entityParser(self, text: str) -> str: text = text.replace('"', '"') text = text.replace(''', '\'') text = text.replace('&', '&') text = text.replace('>', '>') text = text.replace('<', '<') text = text.replace('⁄', '/') return text
可是我又發現,判題系統目前對 &gt;
的輸出其實是 >
。
那麼再試下 "&gt;" 輸出是 "&gt;"
,又沒有遞歸處理,看了是判題機有問題。函數
有一個很相似的題目,就是 一個 n 位的數組,每一個位置能夠填 0,1,2,可是相鄰的不能重複,求一共有多少中填法。(好像還有點別的附加條件)spa
這道題目三種顏色沒有任何區別,就用 ABC 來表明,n = 1 時
A 開頭有:
ABA ABC ACA ACB
B 開頭有:
BAB BAC BCA BCB
C 開頭有:
CAB CAC CBA CBCcode
這裏總結起來只有兩種模式:ABA 即第一第三個同樣 和 ABC 即三個都不一樣。htm
ABA 模式有 6 種:ABA ACA BAB BCB CAC CBC
ABC 模式有 6 種:ABC ACB BAC BCA CAB CBA對象
第二層須要再第一層的基礎上安排,並且只和他的模式有關,而與具體顏色無關。blog
若是第一層是 ABA 模式(這個模式裏的任意狀況都會形成相同的結果):
第一層 ABA ABA ABA ABA ABA ||| ||| ||| ||| ||| 第二層 BAB BAC BCB CAC CAB
結果有 5 種,一樣,咱們只看模式,不看具體顏色,結果種有 ABA 模式 3 種,ABC 模式 2 種
若是第一層是 ABC 模式(這個模式裏的任意狀況都會形成相同的結果):
第一層 ABC ABC ABC ABC ||| ||| ||| ||| 第二層 BAB BCA BCB CAB
結果有 4 種,一樣,咱們只看模式,不看具體顏色,結果種有 ABA 模式 2 種,ABC 模式 2 種
咱們代碼裏用 aba 表示當前層的 ABA 模式種數,abc 表示當前層 ABC 模式種數,而 aba2,abc2 表示下一層。這樣就能夠地推計算種類數量:
MOD = 1000000007 aba2 = (aba * 3 + abc * 2) % MOD abc2 = (aba * 2 + abc * 2) % MOD
aba 和 abc 初始都爲 6
class Solution: def numOfWays(self, n: int) -> int: aba = 6 abc = 6 MOD = 1000000007 for _ in range(n-1): aba2 = (aba * 3 + abc * 2) % MOD abc2 = (aba * 2 + abc * 2) % MOD aba, abc = aba2, abc2 return (aba + abc) % MOD
歡迎來個人博客: https://codeplot.top/
個人博客刷題分類:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/