leetcode 位元組跳動 挑戰字串

2022-09-11 12:18:14 字數 1445 閱讀 9303

換句話說,第乙個字串的排列之一是第二個字串的子串。

示例1:

輸入: s1 = "ab" s2 = "eidbaooo"

輸出: true

解釋: s2 包含 s1 的排列之一 ("ba").

示例2:

輸入: s1= "ab" s2 = "eidboaoo"

輸出: false

注意:輸入的字串只包含小寫字母

兩個字串的長度都在 [1, 10,000] 之間

解題思路:

解決這個問題前可以先回顧下無排列的子串匹配問題,我們當時使用的是實現了dfa狀態轉移圖,當匹配到不同字元時來到不同的狀態,知道最終完全匹配。

(圖後補,下次一定)

而對於有排列的子串問題,我們一樣可以構建乙個dfa圖來實現它,在這時候相比於無排列子串匹配問題,子串的字元順序就不重要了,思路如下:

(圖後補,下次一定)

逐個判斷長字串字元:

(1)不是子串字元,跳過

(2)是子串字元且沒多餘重複,記錄當前匹配到的長度

(3)是子串字元但是已經多餘了,比如子串「adc」,串「dcda「,第二個d是超出了子串d個數的,從第二個d這個位置往前重新匹配到dc。

(4)若匹配到的個數已經達到子串長度,完成。

class

solution

return

false

; }

int size[26];//

子串字元統計

int size_tmp[26];//

臨時子串已用字元統計

memset(size,0,sizeof(int)*26

); memset(size_tmp,

0,sizeof(int)*26

);

mapmp;

for(int i=0;i)

int len=0

;

for(int i=0;i)

//是子串字元,判斷是否多餘出現

//couta']'

a'])

else

if(size_tmp[s2[i]-'

a']==size[s2[i]-'

a'])

else

if(size_tmp[s2[z]-'

a']==size[s2[z]-'

a']) break; //

沒有容量了

} }

if(len==len_s1) return

true

; }

return

false

; }

};

此處可以不用map容器,只是一開始查詢想到了map,後來規定狀態才想到了陣列。

leetcode 位元組跳動 挑戰字串

輸入 flower flow flight 輸出 fl 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。class solution if flag 1 n if flag 0 return 在這題中直接返回子字串。如果不存在公共字首,返回空字串 示例 1 輸入 flower ...

2020 09 06位元組跳動後端

分析 這道題我是用的動態規劃來求解,和傳統的上樓梯問題不同,它多了乙個不能連續走兩步的條件,但我認為沒什麼不同。根據題意,最後一步要麼是2要麼是1,如果最後一步是2,則要考慮不能連續走兩步的限制情況。也就是說,對於乙個已經走到n 2步的人來說,他只能由n 3步走1步得到,而不能由n 4步走兩步得到....

位元組跳動mysql面試 位元組跳動 Golang面試

應朋友之邀,今天下午去位元組送了顆人頭,最後不負眾望,被面試官攆出來了 一面mysql索引快的原理 回答這個問題需要先看一下資料庫的儲存結構 頁結構頁和頁之間的關係 頁和頁之間的關係 有個知識,之前不知道的 聚集索引 以主鍵建立的索引,葉子節點儲存的是表中的資料 非聚集索引 非主鍵建立的索引,葉子節...