day08 466 統計重複個數 困難

2021-10-05 06:03:19 字數 2521 閱讀 4425

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