演算法(字串篇簡單1)

2021-10-07 09:50:59 字數 2080 閱讀 9601

反轉字串

和反轉陣列一樣,尾部與頭部交換

字串中的第乙個唯一字元

第乙個不重複的字元,不重複用雜湊表來判斷

實現 strstr()

判斷某字串是否含有子字串

思路一:暴力法,先匹配第乙個字元,不一樣的話往後移,如果一樣就內部匹配,匹配不成功就回溯,時間最壞o(n(n-l)),空間o(1)

思路二:kmp演算法 時間o(n+l),回溯不太好,利用部分匹配表

class

solution

:def

strstr

(self, haystack:

str, needle:

str)

->

int:

next

= self.getnext(needle)

i =0 j =

0while i <

len(haystack)

and j <

len(needle)

:if j ==-1

or haystack[i]

== needle[j]

: i +=

1 j +=

1else

: j =

next

[j]if j ==

len(needle)

:return i - j

return-1

defgetnext

(self,s)

:next=(

len(s)+1

)*[0

]next[0

]=-1

i =0 j =-1

while i <

len(s)

:if j ==-1

or s[i]

== s[j]

: i +=

1 j +=

1next

[i]= j

else

: j =

next

[j]return

next

外觀數列

規律尋找

class

solution

:def

countandsay

(self, n:

int)

->

str:

list_p =[[

'1'],[

]]count =

0 flag =

1for i in

range(0

,n-1):

flag = i %

2for j in

range

(len

(list_p[flag]))

:if j ==0:

count +=

1elif

int(list_p[flag]

[j])

==int

(list_p[flag]

[j-1])

: count +=

1else

: list_p[

1-flag]

str(count)

) list_p[

1-flag]

[j-1])

count =

1 list_p[

1-flag]

str(count)

) list_p[

1-flag]

[j])

count =

0 list_p[flag]

.clear(

)return

''.join(list_p[

1-flag]

)

最長公共字首

字串查詢 1 暴力字串查詢演算法

virtual int findstr const string haystack,const string needle override if j patsize return i return 1 最差情況下,haystack可能是 aaa.aaa needle是 a.ab 在這種情況下,需要...

字串簡單加密演算法

題目描述 輸入乙個字串,其中字串小寫字母a 到 z 組成。請將此字串進行加密 1 將字串前半部分每個字元減 1,後半部分每個字元加 1。比如d減 1變為c。2 如果字串長度為奇數,中間字元不作處理。3 字元為a z時做迴圈處理。比如,字元為a,減 1為z 字元為z,加 1為a。eg bewuz 處理...

《演算法》 字串 字串排序

輸入字串和字串對應的組別 組別也是字串的鍵 在滿足組別有小到大排序的情況下,將字串按字母順序排序 第一步,記錄組別的頻率 為了得到某個字串在排序後的範圍,比如組別2肯定在組別1後面,在組別3前面,把每個組別有多少個人記錄下來,方便我們定位 第三步,分類 該組別的位置起點 向後挪一位 因為當前位被用了...