給定長度為m的字串aim,以及乙個長度為n的字串str
問能否在str中找到- -個長度為m的連續子串, 使得這個子串剛好由aim的m個字元組成,順序無所謂, 返回任意滿足條件的乙個子串的起始位置,未找到返回-1
找到str中所有字串substr,比較substr與aim是否成分相同(字母的種類和數量一致)
遍歷所有可能的字串長度通過視窗:欠與還
//比較與aim長度相同的的所有子串是否含有與它成分一致,若有,返回偏移量,否則返回-1
intfindaim
(string str, string aim)
;for
(int i =
0; i < aim.
length()
; i++
) substr = str.
substr
(i, aim.
length()
);findaim =
true
;for
(int i =
0; i < aim.
length()
; i++)if
(findaim ==
true
)return i;
}return-1
;}
//比較與aim長度相同的的所有子串是否含有與它成分一致,若有,返回偏移量,否則返回-1
//法2:最優解,通過「視窗」
intfindaim2
(string str, string aim)
;int
* pcnt = count +97;
for(
int i =
0; i < aim.
length()
; i++
) count[aim[i]]++
;//記錄視窗與aim的交易關係
//初始值是字元總長度
int owe = aim.
length()
;//初始化第乙個視窗
for(
int i =
0; i < aim.
length()
; i++)if
(owe ==0)
return0;
//移動「視窗」,每次移動:拿去乙個字元,新增乙個字元,共可移動str.length() - aim.length()次
//移除的字元是第i個,新增的字元是第i+aim.length()個
for(
int i =
0; i <= str.
length()
- aim.
length()
; i++
)return-1
;}
string generatearr
(int len,
int left,
int right)
return str;
}
尋找子串位置
給出字串a和字串b,保證b是a的乙個子串,請你輸出b在a中第一次出現的位置。輸入描述 input description 僅一行包含兩個字串a和b 輸出描述 output description 僅一行乙個整數 樣例輸入 sample input abcd bc 樣例輸出 sample output...
尋找最長公共子串
def find lcp s,t lens len s lent len t if not lens or not lent return 0 longest 0 for i in range lens for j in range lent length 0 m i n j while m len...
如何尋找最長回文子串
5.最長回文子串 回文串是面試常常遇到的問題 雖然問題本身沒啥意義 本文就告訴你回文串問題的核心思想是什麼。首先,明確一下什 回文串就是正著讀和反著讀都一樣的字串。比如說字串aba和abba都是回文串,因為它們對稱,反過來還是和本身一樣。反之,字串abac就不是回文串。可以看到回文串的的長度可能是奇...