208
タイトルの説明:
挿入、検索、startsWithの3つの操作を含む、Trie(プレフィックスツリー)を実装します。
例:
回答:
class Trie:
def __init__(self):
"""
Initialize your data structure here.
"""
self.root={
}
self.end_of_word='#'
def insert(self, word: str) -> None:
"""
Inserts a word into the trie.
"""
node=self.root
for char in word:
node=node.setdefault(char,{
}) #字典的内置函数setdefault()
node[self.end_of_word]=self.end_of_word
def search(self, word: str) -> bool:
"""
Returns if the word is in the trie.
"""
node=self.root
for char in word:
if char in node:
node=node[char]
else:
return False
if self.end_of_word in node:
return True
else:
return False
def startsWith(self, prefix: str) -> bool:
"""
Returns if there is any word in the trie that starts with the given prefix.
"""
node=self.root
for char in prefix:
if char in node:
node=node[char]
else:
return False
return True
# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
273
タイトルの説明;
負でない整数numを対応する英語表現に変換します。
例:
回答:
class Solution:
def numberToWords(self, num: int) -> str:
d1=['','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Eleven','Twelve','Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen','Twenty']
d2=['','Ten','Twenty','Thirty','Forty','Fifty','Sixty','Seventy','Eighty','Ninety']
if num==0:return 'Zero'
if num<=20:return d1[num]
if num<100:
t,d=num//10,num%10
return d2[t]+' '+d1[d] if d>0 else d2[t]
if num<1000:
h=num//100
if num%100==0:return d1[h]+' Hundred'
return d1[h]+' Hundred '+self.numberToWords(num%100)
if num<10**6:
th=num//10**3
if num%10**3==0:
return self.numberToWords(th)+' Thousand'
return self.numberToWords(th)+' Thousand '+self.numberToWords(num%10**3)
if num<10**9:
mi=num//10**6
if num%10**6==0:
return self.numberToWords(mi)+' Million'
return self.numberToWords(mi)+' Million '+self.numberToWords(num%10**6)
if num<10**12:
bi=num//10**9
if num%10**9==0:
return d1[num//10**9]+' Billion'
return self.numberToWords(bi)+' Billion '+self.numberToWords(num%10**9)
459
タイトルの説明:
空でない文字列が与えられた場合、それが複数回繰り返される部分文字列で構成できるかどうかを判断します。指定された文字列には小文字の英字のみが含まれ、長さは10,000を超えません。
例:
回答:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
'''
假设母串S是由子串s重复N次而成, 则 S+S则有子串s重复2N次,
那么现在有:S=Ns, S+S=2Ns, 其中N>=2。
如果条件成立, S+S=2Ns, 掐头去尾破坏2个s,S+S中还包含2*(N-1)s,
又因为N>=2, 因此s在(S+S)[1:-1]中必出现一次以上
假设母串S由子串a+b组成,则(S+S)=a+b+a+b,
掐头去尾,则开头的a和最后的b无法匹配,相当于(S+S)[1:-1] = c+b+a+d ,
其中c!=a, d!=b,如果a+b在其中出现,则必然有a=b
'''
return s in (s+s)[1:-1]
686
タイトルの説明:
2つの文字列aとbが与えられた場合、文字列aが繰り返し重ね合わされる最小回数を見つけて、文字列bが重ね合わされた文字列aの部分文字列になり、存在しない場合は-1を返します。
注:文字列「abc」は、0回繰り返されると「」、「abc」は1回繰り返され、「abcabc」は2回繰り返されます。
例:
回答:
class Solution:
def repeatedStringMatch(self, a: str, b: str) -> int:
#关键在于终止长度,2*a+b
n=(len(b)*2)//(len(a))+1
for i in range(1,n+2):
if b in a*i:
return i
return -1
724
タイトルの説明:
整数型の配列numsを指定して、配列の「センターインデックス」を返すことができるメソッドを記述してください。
配列の中心インデックスを次のように定義します。配列の中心インデックスの左側にあるすべての要素の合計は、右側にあるすべての要素の合計に等しくなります。
配列に中央インデックスがない場合は、-1を返す必要があります。配列に複数の中央インデックスがある場合は、左に最も近いものを返す必要があります。
例:
回答:
class Solution:
def pivotIndex(self, nums: List[int]) -> int:
S=sum(nums)
left=0
for i in range(len(nums)):
right=S-nums[i]-left
if right==left:
return i
left+=nums[i]
return -1