九章演算法 位元組跳動面試題 字串查詢 II

2021-10-18 03:51:21 字數 1421 閱讀 6750

描述

實現時間複雜度為 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 解釋 先手玩家第一輪拿走乙個硬幣 此時還...