小公尺OJ python實現交叉佇列

2021-09-19 15:39:46 字數 1888 閱讀 7646

描述

給出三個佇列 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

輸出樣例

true

false

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...