簡體   English   中英

檢查字符串是否包含連續 substring 的最佳方法?

[英]Best way to check if a string contains consecutive substring?

我試圖找到檢查字符串是否連續出現特定 substring 的最佳方法。 返回一個 boolean 值,例如,僅當整個字符串在字符串內與其自身相鄰時才返回 True。 一些示例測試用例:

consecutive_checker(string='blaablaa', substring = 'a')
>>> True

consecutive_checker(string='blaablaa', substring = 'aa')
>>> False

consecutive_checker(string='blaablaa', substring = 'blaa')
>>> True

consecutive_checker(string='blaablaa', substring = 'baa')
>>> False

我的方法:

def consecutive_checker(string='blaablaa', substr = 'blaa'):
    count = string.count(substr)
    if count > 1:
        for sidx in range(len(string) - len(substr)+1):
            for ssidx in range(len(substr)+1):
                if string[sidx:sidx+ssidx] == string[sidx+ssidx:sidx+ssidx*2] == substr:
                    return True
    return False

這里是為了提高效率(如果不是很明顯):

  1. 僅當 substring 至少出現兩次時才會繼續。
  2. 縱向它挑選指數
  3. 找到連續的子字符串后立即返回

所以我在想如何進一步改進它。 似乎內置count() function 雖然非常有效地迭代整個字符串。 這可能是一個改進點,但我不能完全避免這種情況,因為我將它用作我的安全網,只在需要時進行迭代。 同樣,三個丑陋的檢查和雙重 for 循環不會散發出一種效率氛圍。 那么我怎樣才能更好地改進它呢? 歡迎任何建議!

你真的把這件事復雜化了。 只需將 substring 加倍並檢查它是否出現在字符串中。

def consecutive_checker(string, substr):
    return substr*2 in string

另一種方法是使用.find() function 返回傳遞的參數(子字符串)的第一個索引。 對於沒有找到它的情況,它將返回-1

>>> string = 'blaablaa'
>>> string.find('aa'*2)
-1
>>> string.find('blaa'*2)
0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM