一、子串:串中任意個連續的字符組成的子序列稱爲該串的子串
備註:空串屬於子串面試
二、串中字符均不相同: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:線性時間求迴文子串
問題:把一個0-1串進行排序,能夠交換任意兩個位置,問最少交換的次數?
思路1:快排partition,數字順序會改變
思路2:倒着複製,數字順序不會改變
思路1:hash
參考文獻: