Python編程題17--字符串在另一個字符串中的位置

題目

給定字符串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)))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章