描述
給出三個佇列 s1,s2,s3 ,判斷 s3 是否是由 s1 和 s2 交叉得來。 如:s1 為 aabcc , s2 為 dbbca。 當 s3 為 aadbbcbcac 時,返回 true(即將 s1 拆成三部分: aa,bc,c 分別插入 s2 對應位置) 否則返回 false。
輸入
aabcc,dbbca,aadbbcbcac
輸出
true
輸入樣例
aabcc,dbbca,aadbbcbcac輸出樣例aabcc,dbbca,aadbbbaccc
a,b,ab
a,b,ba
a,b,ac
abc,bca,bcaabc
abc,bca,aabbcc
truefalse
true
true
false
true
false
import sys
result =
for line in sys.stdin:
a,b,c = line.strip().split(",")
len1, len2, len3 = len(a), len(b), len(c)
flag = true
i = 0
j = 0
if len1 + len2 != len3: # 如果長度不匹配,直接不合格
flag = false
else:
for k in range(len3):
## print(a[i],b[j],c[k],a,b,c)
if i <= len1 - 1 and j <= len2 - 1: # 棧a,b都還存在元素
if a[i] == b[j] == c[k]: # 兩棧的元素相等
if j != len2 - 1 and b[j+1] == c[k+1]:
j += 1
elif i != len1 - 1 and a[i+1] == c[k+1]:
i += 1
else:
i += 1
elif a[i] == c[k]:
i += 1
elif b[j] == c[k]:
j += 1
elif a[i] != c[k] and b[j] != c[k]:
flag = false
break
elif i >= len1 and j >= len2 and k <= len3: # 兩個棧都為空,但c不為空
flag = false
break
elif i <= len1 - 1 and j >= len2: # 棧a不為空
if a[i] == c[k]:
i += 1
elif a[i] != c[k]:
flag = false
break
elif j <= len2 - 1 and i >= len1: # 棧b不為空
if b[j] == c[k]:
j += 1
elif b[j] != c[k]:
flag = false
break
## print(i,j,k)
if flag == true:
else:
print("\n".join(map(str, result)))
小公尺OJ Python實現爬樓梯
描述 在你面前有乙個n階的樓梯,你一步只能上1階或2階。請問計算出你可以採用多少種不同的方式爬完這個樓梯。輸入 乙個正整數,表示這個樓梯一共有多少階 輸出 乙個正整數,表示有多少種不同的方式爬完這個樓梯 輸入樣例 5 10輸出樣例 8 89 思路分析,明顯的遞迴演算法 def climb n if ...
小公尺OJ 6(交叉佇列)
交叉佇列 序號 6 難度 有挑戰 時間限制 1000ms 記憶體限制 10m描述 給出三個佇列 s1,s2,s3 判斷 s3 是否是由 s1 和 s2 交叉得來。如 s1 為 aabcc s2 為 dbbca。當 s3 為 aadbbcbcac 時,返回 true 即將 s1 拆成三部分 aa,bc...
小公尺OJ 6 交叉佇列
將題目可以轉換成尋找一條路徑。走過s1或s2時,不能跳過或回頭,只能沿著當前字串前進或者跳到另乙個字串上一次走到的位置。利用dp i j 記錄路徑,i表示走到s1的當前位置,j表示走到s2的當前位置,dp i j 表示當前路徑是否等於與s3截止到 i j 的相等。include using name...