直通BAT面試演算法精講 字串(1)

2021-08-21 12:13:52 字數 2336 閱讀 2663

字串面試題的特點:

1.廣泛性

(1)字串可以看做字元型別的陣列,與陣列排序、查詢、調整有關

(2)很多其他型別的面試題可以看做字串型別的面試題

2.需要掌握的概念

(1)回文

(2)子串(連續)

(3)子串行(不連續)

(4)字首樹(trie樹)

(5)字尾樹和字尾陣列

(6)匹配

(7)字典序

3.需掌握的操作:

(1)與陣列相關的操作:增刪改查

(2)字元的替換

(3)字串的旋轉

字串題目的常見型別

1.規則判斷:

(1)判斷字串是否符合整數規則

(2)判斷字串是否符合浮點數規則

(3)判斷字串是否符合回文字串規則

2.數字運算

int和long型別表達範圍有限,所以經常用字串實現大整數

與大整數相關的加減乘除操作,需要模擬筆算的過程

3.與陣列操作有關的型別

(1)陣列相關的調整,排序等操作需要掌握

(2)快速排序的劃分過程需要掌握和改寫

4.字元計數

(1)雜湊表

(2)固定長度的陣列

(3)滑動視窗問題、尋找無重複字元子串問題,計算變位詞問題

5.動態規劃問題

(1)最長公共子串

(2)最長公共子串行

(3)最長回文子串

(4)最長回文子串行

6.搜尋型別

(1)寬度優先搜尋

(2)廣度優先搜尋

7.高階演算法與資料結構解決的問題

(1)manacher演算法解決最長回文子串問題

(2)kmp演算法解決字串匹配問題

(3)字首樹問題

(4)字尾樹和字尾陣列

(5)通常面試中很少出現

拓撲結構相同子樹練習題

兩種方法:

方法1:

對於t1的每棵子樹,都去判斷是否與t2樹的拓撲結構完全一樣,這個過程的實踐複雜度是o(m),t1的子樹共有n棵,所以時間複雜度為o(m*n)

方法2:

首先把t1樹和t2樹按照先序遍歷的方式序列化,之後用kmp演算法去判斷t2str是否是t1str的子串即可。t1的序列化的過程是o(n),t2的序列化是o(m),kmp演算法解決匹配問題的複雜度是o(m+n),所以總體時間複雜度是o(m+n)

詞語變形練習題

兩個字串str1和str2,如果str1和str2中出現的字元種類一樣,且每種字元出現的次數一樣,那麼str1和str2互為變形詞。

給定兩個字串以及他們的長度,請設計乙個函式,返回乙個bool值,代表他們是否互為變形詞

測試用例:

str1=『123』,str2=』231』,返回true

str1=』123』,str2=』2331』,返回false

解題思路:

使用固定長度的陣列來存放每個字串裡面出現的次數,

對每個串進行計數,最後再比較是否相同

class

solution:

defchktransform

(self,a,lena,b,lenb):

dicta = self.countdict(a,lena)

dictb = self.countdict(b,lenb)

return dicta == dictb

defcountdict

(self,a,lena):

dicta = {}

for i in range(lena):

if a[i] not

in dicta:

dicta[a[i]] = 0

dicta[a[i]] += 1

print(dicta)

return dicta

test = solution()

a = '12314'

b = '231522'

lena = len(a)

lenb = len(b)

print(test.chktransform(a,lena,b,lenb))

直通BAT面試演算法精講 字串(3)

空格替換練習題 題幹 給定乙個字串str,將其中所有的空格字元替換成 20 假設str後面有足夠的空間 一般思路 1 遍歷發現空格數量,計算替換後的總長度 2 從右往左依次拷貝字元,遇到空格換為 20 即可。python 可以使用 replace 函式 class solution def repl...

直通BAT面試演算法精講 排序(1)

注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...

直通BAT面試演算法精講 鍊錶(1)

鍊錶問題知識點和注意事項 1.鍊錶問題演算法難度不高,但考察 實現能力。2.鍊錶和陣列都是一種線性結構,陣列是一段連續的儲存空間,鍊錶空間不一定保證連續,是臨時分配的 鍊錶問題 實現關鍵點 1.鍊錶調整函式的返回值,型別要求往往是節點型別。2.處理鍊錶過程中,先採用畫圖的方式理清邏輯。3.鍊錶問題對...