1.題目描述 466. 統計重複個數
由 n 個連線的字串 s 組成字串 s,記作 s = [s,n]。例如,["abc",3]=「abcabcabc」。
如果我們可以從 s2 中刪除某些字元使其變為 s1,則稱字串 s1 可以從字串 s2 獲得。例如,根據定義,"abc" 可以從 「abdbec」 獲得,但不能從 「acbbe」 獲得。
現在給你兩個非空字串 s1 和 s2(每個最多 100 個字元長)和兩個整數 0 ≤ n1 ≤ 106 和 1 ≤ n2 ≤ 106。現在考慮字串 s1 和 s2,其中 s1=[s1,n1] 、s2=[s2,n2] 。
請你找出乙個可以滿足使[s2,m] 從 s1 獲得的最大整數 m 。
示例:輸入:
s1 ="acb",n1 = 4
s2 ="ab",n2 = 2
返回:2
2.思路分析
1.按照文中數量的提示,用長字串來做匹配是不行的,因為可能很長
2.按照短的子串來匹配,就要考慮子串和2倍子串兩種情況
3.若n2==2*n1,那麼按照一倍的倍數計算即可q=n1*n1
4.若n2>2*n1,按照q = n1//2*n2 + n1%2*n1即可
5.最後一步計算 m = q//n2
實際上這個思路不對,不能處理更多的情況,改為了從1開始嘗試各個倍數字串知道找到當前收益開始降低的倍數為止,但是這個思路也是不對,因為可能收益先降低後又公升高到最大值,根據bad case分析,最多嘗試到最小公倍數/n1倍數次,結果邏輯對了,但是超時了
3.debug過程
對於leetcode的困難題,印象就研究過兩個,不看題解,基本上得不到ac解,還需繼續努力。而且即使得到邏輯正確的解也是不斷嘗試摸索過程,有點費勁,後續,暫時先不考慮困難的題目了,只考慮中等題目,因為困難題目面試中說實話也很難遇到,基本上以<=中等難度為主
4.非ac**[執行超時](python)
class solution(object):
def getmaxrepetitions(self, s1, n1, s2, n2):
""":type s1: str
:type n1: int
:type s2: str
:type n2: int
:rtype: int
思路:1.按照文中數量的提示,用長字串來做匹配是不行的,因為可能很長
2.按照短的子串來匹配,就要考慮子串和2倍子串兩種情況
3.若n2==2*n1,那麼按照一倍的倍數計算即可q=n1*n1
4.若n2>2*n1,按照q = n1//2*n2 + n1%2*n1即可
5.最後一步計算 m = q//n2
"""def lcm(x, y):
#最小公倍數
if x > y:
greater = x
else:
greater = y
while (true):
if ((greater % x == 0) and (greater % y == 0)):
lcm = greater
break
greater += 1
return lcm
def get_generate_count(s1, s2):
# 判斷s2是否可以通過s1刪減某些字元得到
i = j = 0
s1_len = len(s1)
s2_len = len(s2)
count = 0
while true:
if i == s1_len:
break
if s1[i] == s2[j]:
j += 1
if j == s2_len:
j = 0
count += 1
i += 1
return count
num = get_generate_count(s1, s2)
best_ratio = 1
max_roi = num
nums = [num]
ratio = 1
max_ratio = lcm(len(s1), len(s2))/ len(s1)
while true:
ratio += 1
if ratio > n1:
break
tnum = get_generate_count(s1 * ratio, s2)
if tnum / ratio > max_roi:
max_roi = tnum / ratio
num = tnum
best_ratio = ratio
else:
if ratio >= max_ratio:
break
q = n1 // best_ratio * num
if n1 % best_ratio - 1 > -1:
q += nums[n1 % best_ratio - 1]
return q // n2
shell awk 統計重複個數
有檔案file.log內容如下 要統每個網域名稱出現次數 4 2 1 答案是 awk f end file.log 解釋一下,awk語法就不說了 f引數是制定awk分隔符,這裡制定的是 所以每行被分成4個部分。sort 的 r是降序,k是按照第幾組字元排序,從1開始。a可以理解成key value形...
JS 統計重複個數
由 n 個連線的字串 s 組成字串 s,記作 s s,n 例如,abc 3 abcabcabc 如果我們可以從 s2 中刪除某些字元使其變為 s1,則稱字串 s1 可以從字串 s2 獲得。例如,根據定義,abc 可以從 abdbec 獲得,但不能從 acbbe 獲得。現在給你兩個非空字串 s1 和 ...
LeetCode 統計重複個數
q 由 n 個連線的字串 s 組成字串 s,記作 s s,n 例如,abc 3 abcabcabc 如果我們可以從 s2 中刪除某些字元使其變為 s1,則稱字串 s1 可以從字串 s2 獲得。例如,根據定義,abc 可以從 abdbec 獲得,但不能從 acbbe 獲得。現在給你兩個非空字串 s1 ...