描述
實現時間複雜度為 o(n + m)的方法 strstr。
strstr 返回目標字串在源字串中第一次出現的第乙個字元的位置. 目標字串的長度為 m , 源字串的長度為 n . 如果目標字串不在源字串中則返回 -1。
lintcode 領扣
樣例1
輸入:source = "abcdef", target = "bcd"
輸出:1
解釋:
字串第一次出現的位置為1。
樣例2
輸入:source = "abcde", target = "e"
輸出:4
解釋:
字串第一次出現的位置為4。
演算法:hash
演算法思路
**思路
計算target的hash值
計算source的hash值的過程中,依次計算每targetlen位的hash值。
> 假設target長度為2,source為「abcd」
> hash("cd") = (hash("bc + d") - hash("b")*2 ) % base
複雜度分析
n表示字串source長度,m表示字串target長度
public
class
solution
intm
=target
.length
();if(m
==0)int
power=1
;for
(inti=
0;ii++)
//先計算一下target的hash值
inttargetcode=0
;for
(inti=
0;ii++)
//當source code 加上右邊乙個character,就要減掉左邊的乙個character
intsourcecode=0
;for
(inti=
0;i<
source
.length
();i
++)sourcecode=(
sourcecode
-power
*source
.charat(i
-m))%
base;if
(sourcecode
<0)
//若hash值相同,返回答案 if(
sourcecode
==targetcode)}
return-1
;}}
更多題解參考:九章演算法
九章演算法 Google面試題 字串解碼
給出乙個表示式 s 此表示式包括數字,字母以及方括號。在方括號前的數字表示方括號內容的重複次數 括號內的內容可以是字串或另乙個表示式 請將這個表示式展開成乙個字串。樣例1 輸入 s abc3 a 輸出 abcaaa 樣例2 輸入 s 3 2 ad 3 pf xyz 輸出 adadpfpfpfadad...
位元組跳動面試題 字串校對
題目描述 輸入描述 第一行包括乙個數字n,表示本次用例包括多少個待校驗的字串。後面跟隨n行,每行為乙個待校驗的字串。輸出描述 n行,每行包括乙個被修復後的字串。舉例 輸入 2 helloo wooooooow輸出 hello woow 字串修正函式 defcorrection string s n ...
九章演算法 位元組跳動面試題 硬幣排成線
有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定先手玩家必勝還是必敗?若必勝,返回 true,否則返回 false.樣例 1 輸入 1輸出 true 樣例2 輸入 4輸出 true 解釋 先手玩家第一輪拿走乙個硬幣 此時還...