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)) # 印出符合字串中最長的長度
程式執行邏輯說明:
- 程式首先從模式
'00'
和'11'
開始,透過交替拼接產生類似'0011'
、'1100'
的字串,直到生成的字串長度超過目標字串d
的長度。 - 產生的字串會存入列表
ssa
中。 - 接著,程式檢查哪些生成的字串出現在
d
中,將符合的字串存入列表t
中。 - 最後,程式會找出這些符合字串中最長的一個,並印出它的長度。
範例輸出:
假設 d = '010011001010'
,程式會生成許多與模式有關的字串,並找到出現在 d
中的子字串,最終會輸出符合字串的最大長度。
沒有留言:
張貼留言