(字串型別)程式設計解題思路整理 20200706

2021-10-07 19:37:58 字數 3009 閱讀 8272

給出兩個字串分別為source和target,判斷在source中是否存在target,若存在則返回目標字串的首位字母的下標,若無則返回-1.

例:source=『asjdkfjakdfja』 ,target=『jdk』

則輸出結果為:2

source=『ahjdfhakdfh』,target=『mn』

則輸出結果為:-1

對於字串查詢問題,可使用雙重 for 迴圈解決,效率更高的則為 kmp 演算法。這裡需要考慮目標字串比源字串短的可能。

// 通過兩次遍歷完成查詢。

const int 所定義的int的值不可變。

(haystack,needle 大海撈針的意思)

int strstr

(char* haystack, char* needle)}if

(j == len_n)

return i;

}return-1

;}

// 通過兩次遍歷完成查詢,思路同c語言
class

solution

: def strstr

(self, source, target)

:if source is none or target is none:

return-1

for i in

range

(len

(source)

-len

(target)+1

):for j in

range

(len

(target)):

if source[i + j]

!= target[j]

:break

else

: # no break

return i

return

-1

給出兩個字串分別為s1和s2,判斷在兩個字串是否為異序詞,不是則返回false.

例:s1=『abcd』 ,s2=『dcba』

則輸出結果為:true

source=『abcde』,target=『abc』

則輸出結果為:false

先判斷兩個字串是否等長,然後用下面方法進行下一步比較。

統計詞頻法:依次統計s1中字元出現頻率,再統計s2的字元出現頻率,再進行對比。

遞減法:在s1出現的字元,從s2中移除,最後判斷s2是否為空;

呼叫函式方法:python可以呼叫from collections import counter方法,統計每個字元出現頻率,進行對比。

// 三種方法實現。
#方法一:呼叫函式統計詞頻

class

solution

: def anagram

(self, s, t)

:return collections.

counter

(s)== collections.

counter

(t)#方法二:遞減法

def is_anagrams

(s1,s2)

: list1 =

list

(s1)

list2 =

list

(s2)

iflen

(list1)

=len

(list2)

:for i in list1:

if i in list2:

#list1中的元素若存在於list2則移除

list2.

remove

(i)else

:print

("false"

)if list2:

#全部移除完成後,若list2仍有元素存在則false

print

("false"

)else

:print

("true"

)else

: #長度不等為false

print

("false"

)#方法三:統計詞頻法

def function

(s):

a =list1 =

list

(s)for x in list1:

if x not in a.

keys()

: a[x]=1

else

: a[x]+=1

return a

def is_anagrams

(s1,s2):s1

=function

(s1)s2=

function

(s2)

for i in s1.

keys()

:if i in s2.

keys()

:if s1[i]

== s2[i]

: pass

else

:print

("false"

)break

else

:print

("false"

)break

print

("true"

)

// 統計詞頻法
bool isanagram

(char* s, char* t)

/* 計算字串2中各個字元的數目 */

for(int i =

0; i < t_len; i++

)/* 判斷兩個字串中字元是否一致 */

for(int i =

0; i <

256; i++

)return

true

;}

題目二的解法參考了網上的一些解題思路,後續有更簡單方法再更改。

無重複字串的最長字串解題思路

首先,頭指標start的含義是 如果字串 現某個字元重複,start便後移至上一次出現這個字元的後面一位,字典中此字元對應的value也會更新為當前字元的索引,總之,保持 start,i 中不存在重複字元,對應下文的 else if dic cur 1 start start dic cur 1 d...

習題 字串的排列 解題思路 map

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 熱度指數 633870 本題知識點 字串 動態規劃遞迴 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba...

力扣解題思路 環繞字串中唯一的子字串 糾錯記錄

思路 我把這一題和這題 等差數列劃分 弄混了,於是我按照同一種方法進行動態規劃 class solution system.out.println dp i sum dp i return sum 然後就出問題了。因為這個題目中有重複字元!比如cac我會認為答案是3 c,a,c 所以錯了,所以這種方...