大佬看看这个代码没问题吧,第二题 DFS,加了个简单的剪枝
import sys
def per(origin, target):
for i in target:
if i not in origin:
return []
res = []
dfs(origin, target, [], "", res)
return res
def dfs(old, target, path, now, res):
if not old:
# 遍历结束
# 判断是否相等
if now == target:
res.append(path.copy())
return
if not is_in(now, target):
# 未遍历结束
# 判断是否已经不相等
return
cur = old[0]
if cur not in target:
path.append("d")
dfs(old[1:], target, path, now, res)
path.pop()
else:
path.append("d")
dfs(old[1:], target, path, now, res)
path.pop()
path.append("l")
dfs(old[1:], target, path, cur + now, res)
path.pop()
path.append("r")
dfs(old[1:], target, path, now + cur, res)
path.pop()
def is_in(ls1, ls2):
# 判断 ls1 是否为 ls2 的连续子集
str1 = "".join(map(str, ls1))
str2 = "".join(map(str, ls2))
return str1 in str2
if __name__ == "__main__":
s = int(sys.stdin.readline().strip())
ans = ""
for _ in range(s):
origin = sys.stdin.readline().strip()
target = sys.stdin.readline().strip()
ans += "{\n"
res = per(origin, target)
res.sort()
# print(res)
if res:
for each_res in res:
ans += " ".join(each_res) + " \n"
ans += "}\n"
if ans:
ans = ans[:-1]
print(ans)