字串水題

2021-09-17 23:59:02 字數 1616 閱讀 9543

hdu - 1686

給a串b串,求a串在b串**現次數。

a串kmp預處理,然後再對a,b比較,用j表示匹配時a串的pos,則當j>=strlen(a)時候,ans++;

hdu - 2087

給a串和b串,求從a串中能割出來多少個b串。

對a串和b串進行預處理,這個kmp_next陣列是基於a和b串的。

即正常的kmp是對同乙個串的字首和當前位置進行比較,得出跳轉位置

此處的kmp是對b串的字首和a串當前位置進行比較,得出跳轉位置。

再比較,用j表示匹配是a串的pos,則當j==strlen(b)時候,ans++;

//此處len1為strlen(b),len2為strlen(a)

hdu - 3746

給你乙個字串,要求將字串的全部字元最少迴圈2次需要新增的字元數。

即求出迴圈節的長度len-kmpnext[len]

若迴圈節長度為0,再補一次

否則補齊迴圈節。

hdu - 1358

給你乙個字串,問這個字串有多少個迴圈節(從0到pos),求出迴圈節終止位置和迴圈次數。

同上,求出迴圈節長度,然後求出迴圈節次數。

poj - 2406

給出乙個字串 問它最多由多少相同的字串組成。

判斷該字串能否由迴圈節構成即可。

poj - 2752 

給定乙個字串s,從小到大輸出s中既是字首又是字尾的子串的長度。

因為只需要求長度,首先s串本身肯定滿足,其他滿足條件的子串都有個特徵,就是該子串的最後乙個字元肯定與s的最後乙個字元相同。

借助kmp_next陣列向前回溯,若s[pos]==s[len-1],則滿足條件。

hdu - 2594

給你a串b串,求字串s滿足s為a串字首和b串字尾這個條件的最大長度。

sol.1

a串+b串跑kmp即可,從kmp_next[len]向前回溯,直到這個len滿足lensol.2

exkmp

hdu - 3336

統計字串s的每個字首在字串**現次數。

kmp+dp

假設a是b+1處匹配失敗後跳轉位置,那麼,aa=b,也就是說,字首a會在b中又出現一次,用dp[a]表示a以及a的字首在a**現次數,那麼,b以及a的字首在b**現次數即為dp[b]=dp[a]+1,得出轉移方程

轉移方程: dp[i]=dp[kmp_next[i]]+1;

hdu - 4300

給你乙個26個字母表在暗碼中的表現結果。

給你乙個密碼字串s,由明碼s1和暗碼s2組成,明碼在前暗碼在後,但暗碼部分有所缺失,問你還原後的最短的密碼是什麼。

我們先忽略明碼,將暗碼翻譯成明碼後,這個新的字串字串滿足字尾即字首且長度》len/2的最短字串不就是我們要的明碼嗎,但這個題我們不知道暗碼的開頭在**,但我們會求某個串的字尾滿足也是字首的字串啊,那就把這個字串全按照暗碼轉明碼轉一下,拼接到原字串後面,再求出滿足條件的字首+字尾就行了。

句子逆序(字串水題)

將乙個英文語句以單詞為單位逆序排放。例如 i am a boy 逆序排放後為 boy a am i 所有單詞之間用乙個空格隔開,語句中除了英文本母外,不再包含其他字元 介面說明 反轉句子 param sentence 原句子 return 反轉後的句子 public string reverse s...

NYOJ 題目915 字串(字串,水題)

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述shiva得到了兩個只有加號和減號的字串,字串長度相同。shiva一次可以把乙個加號和它相鄰的減號交換。他想知道最少需要多少次操作才能把第乙個字串變換成第二個字串。你現在要去幫助他完成那個這個問題。輸入多組測試資料 每組資料有兩行...

AC 偷吃糖果 字串水題

偷吃糖果 time limit 1000ms memory limit 65536kb description input 第一行乙個t,表示t組測試資料。每組測試資料格式如下。第一行表示字串s,第二行表示字串t。1 t 100 each character of s,t will be betwe...