2024年10月13日 星期日

字串比對例

 d ='010011001010' # 定義一個二進位字串 d

ssa = []  # 初始化一個空的列表 ssa,用來儲存生成的字串

# 針對 '00' 和 '11' 這兩個模式,進行字串生成
for i in ['00', '11']:
    ss = []  # 初始化一個空的列表 ss,用來暫存每次生成的字串
    s = i  # 設定起始的字串 s 為 '00' 或 '11'
    ss.append(s)  # 將起始字串加入 ss
    cs = i  # 初始化一個控制字元串 cs,與 i 相同,用來切換模式

    # 不斷地生成字串,直到生成的字串長度超過 d 的長度
    while True and len(s) < len(d):
        # 根據目前的 cs 是 '00' 或 '11',進行相應的拼接
        if cs == '00':
            s = s + '11'  # 如果當前字串是 '00',則拼接 '11'
            cs = '11'  # 將控制字元串切換為 '11'
        else:
            s = s + '00'  # 如果當前字串是 '11',則拼接 '00'
            cs = '00'  # 將控制字元串切換為 '00'
        ss.append(s)  # 將新生成的字串加入 ss 列表

    s = s[:-2]  # 去掉最後拼接的兩個字元,避免超出長度
    ss = ss[:-1]  # 去掉最後一個元素,因為它的長度超過了 d
    ssa += ss  # 將當前的生成字串列表 ss 合併到 ssa 列表中

print(ssa)  # 印出生成的所有字串列表 ssa

t = []  # 初始化一個空列表 t,用來儲存與字串 d 相符的子串
# 檢查 ssa 中的每個字串是否出現在 d 中
for i in ssa:
    if i in d:  # 如果字串 i 出現在 d 中
        t.append(i)  # 將這個字串加入 t

# 計算每個符合的字串長度,並存入 tl 列表
tl = [len(i) for i in t]
print(max(tl))  # 印出符合字串中最長的長度

程式執行邏輯說明:

  1. 程式首先從模式 '00' 和 '11' 開始,透過交替拼接產生類似 '0011''1100' 的字串,直到生成的字串長度超過目標字串 d 的長度。
  2. 產生的字串會存入列表 ssa 中。
  3. 接著,程式檢查哪些生成的字串出現在 d 中,將符合的字串存入列表 t 中。
  4. 最後,程式會找出這些符合字串中最長的一個,並印出它的長度。

範例輸出:

假設 d = '010011001010',程式會生成許多與模式有關的字串,並找到出現在 d 中的子字串,最終會輸出符合字串的最大長度。

沒有留言:

張貼留言