8.1 數據結構---字符串

(一)字符串

 

一、子串:串中任意個連續的字符組成的子序列稱爲該串的子串
備註:空串屬於子串面試

二、串中字符均不相同:n個字符構成的字符串,假設每一個字符都不同,問有多少個子串正則表達式

答案:n(n+1)/2+1算法

提示:每一個字符均不相同
解析:
包含1個字符的子串共n個
包含2個字符的子串共n-1個
包含3個字符的子串共n-2個
包含4個字符的子串共n-3個
......
包含n個字符的子串共1個
空串1個
綜上所述:子串個數共:1+2+3+。。。+n+1(空串)=n(n+1)/2+1
實例應用:若串S=′software′,其子串的數目是()ide

解析:n(n+1)/2+1=8(8+1)/2+1=37spa

三、串中字符出現重複:字符串www.qq.com全部非空子串(兩個子串若是內容相同則只算一個)個數是().net

答案:503d

備註:存在相同字符,因此計算方法爲總個數減去重複個數,即n(n+1)/2+1-重複個數blog

解析:包含重複子串共:n(n+1)/2+1=10(10+1)/2+1=55,減去重複:2個w,1個ww,1個q,1個.,因此共55-5=50個排序

 

題型:遞歸

  in-place原地:自己O(1空間);遞歸,堆棧空間能夠不考慮

  原地相關的問題:字符串循環左移、右移動

  滑動窗口:能達到O(n)的時間複雜度;O(1)的空間複雜度

  規則相關

  匹配(暴力):KMP

  Manacher:線性時間求迴文子串

 

(二)算法

1、字典序

 

2、簡單操做:插入、刪除字符、旋轉

1.字符替換和複製

 

2.單詞翻轉

 

3、規則判斷(羅馬數字轉換、是不是合法的整數、浮點數)

4、數字運算(大數加法、二進制加法)

 

5、排序、交換(partition過程)

1.0-1交換

問題:把一個0-1串進行排序,能夠交換任意兩個位置,問最少交換的次數?

 

2.交換星號

思路1:快排partition,數字順序會改變

思路2:倒着複製,數字順序不會改變

 

 

 

 

6、字符計數(hash):變位詞

7、匹配(正則表達式、全串匹配、KMP、週期判斷)

8、動態規劃(LCS、編輯距離、最長迴文子串)

9、搜索(單詞變換、排列組合)

 

10、滑動窗口

1.子串變位詞

思路1:hash

 

 

 

參考文獻:

【1】【算法】Google阿里面試精講_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili

【2】求解字符串所包含子串的個數

相關文章
相關標籤/搜索