給出兩個字串分別為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 所以錯了,所以這種方...