題目
給定字符串A和字符串B,請檢測字符串A是否在字符串B中,如果存在則返回字符串B中每次出現字符串A的起始位置,否則返回 -1 。
例如:
給定一個字符串:GBRRGBRGG,另一個字符串:RG
那么字符串 RG 在 GBRRGBRGG 中出現的位置為 3,6
實現思路1
- 設置一個列表,用於存儲結果,分別計算出長字符串s1和短字符串s2的長度:len1、len2
- 對長字符串s1進行遍歷,遍歷過程當索引下標到 len1 - len2 時,結束遍歷
- 遍歷過程,對長字符串s1進行切片操作,起始索引為 i ,結束索引為 i + len2
- 如果切片得到的結果恰等於 s2 ,那就說明 s2 在 s1 出現了,此時把本次出現的起始位置 i 添加到結果列表中
- 最后,判斷結果列表是否為空,不為空則返回結果,否則返回 -1
代碼實現
def index_of_str(s1, s2):
res = []
len1 = len(s1)
len2 = len(s2)
if s1 == "" or s2 == "":
return -1
for i in range(len1 - len2 + 1):
if s1[i] == s2[0] and s1[i:i+len2] == s2:
res.append(i)
return res if res else -1
str1 = "cdembccdefacddelhpzmrtcdeqpjcde"
str2 = "cde"
print("字符串 {} 在另一個字符串 {} 中出現的位置:{} ".format(str2, str1, index_of_str(str1, str2)))
實現思路2
- 設置一個列表,用於存儲結果
- 設置一個變量index,用於表示短字符串s2在長字符串s1中出現的位置,默認為 0
- 通過短字符串s2,對長字符串s1進行分割操作,得到的結果存儲到 split_list
- 對split_list進行遍歷,遍歷完倒數第二個元素時,結束遍歷
- 遍歷過程,把 index 添加到結果列表中
- 最后,判斷結果列表是否為空,不為空則返回結果,否則返回 -1
注意:split() 分割操作時,如果所指定分割串不在字符串中,那么會返回字符串本身。
代碼實現
def index_of_str(s1, s2):
res = []
index = 0
if s1 == "" or s2 == "":
return -1
split_list = s1.split(s2)
for i in range(len(split_list) - 1):
index += len(split_list[i])
res.append(index)
index += len(s2)
return res if res else -1
str1 = "cdembccdefacddelhpzmrtcdeqpjcde"
str2 = "cde"
print("字符串 {} 在另一個字符串 {} 中出現的位置:{} ".format(str2, str1, index_of_str(str1, str2)))