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