|
发表于 2019-11-2 19:11:28
|
显示全部楼层
我这回又改了改,应该好使了:
- def differ(a:list,b:list):
- for i in range(min((len(a),len(b)))):
- if a[i] != b[i]:
- return i
- return min((len(a),len(b)))
- def solve(s1:str,s2:str,s3:str)->bool:
- if len(s3) != len(s1+s2):
- print('调试',1,'长度不对')
- return False
- elif (s3 == s1+s2)or(s3==s2+s1):
- print('调试',2,'算拼接')
- return True
- a=set(s1+s2)
- for i in a:
- if s1.count(i) + s2.count(i) != s3.count(i):
- print('调试',3,'数儿不对')
- return False
- s1,s2,s3 = list(s1),list(s2),list(s3)
- if s1[0] == s2[0]:
- num = differ(s1,s3)
- num1 = differ(s2,s3)
- if num == num1:
- if len(s1) >= len(s2):
- flg = 1
- else:
- flg = 2
- elif num > num1:
- flg = 1
- else:
- flg = 2
- elif s1[0] == s3[0]:
- flg = 1
- elif s2[0] == s3[0]:
- flg = 2
- if flg == 1:
- s1.pop(0)
- elif flg == 2:
- s2.pop(0)
- s3.pop(0)
- #print('调试',s1,s2,s3)
- changed = False
- while s1 or s2:
- if s1 == []:
- if s2[0] == s3[0]:
- s2.pop(0)
- else:
- print('调试',4,'顺序不对')
- return False
- elif s2 == []:
- if s1[0] == s3[0]:
- s1.pop(0)
- else:
- print('调试',4,'顺序不对')
- return False
- elif flg == 1:
- if s2[0] == s3[0]:
- s2.pop(0)
- if not changed:
- changed = True
- elif s1[0] == s3[0]:
- s1.pop(0)
- else:
- print('调试',4,'顺序不对')
- return False
- elif flg == 2:
- if s1[0] == s3[0]:
- s1.pop(0)
- if not changed:
- changed = True
- elif s2[0] == s3[0]:
- s2.pop(0)
- else:
- print('调试',4,'顺序不对')
- return False
- s3.pop(0)
- else:
- print('调试',5,'循环结束,能走到这儿,大概率是对的,但咱不赌')
- return changed
- if __name__ == '__main__':
- print('示例1 T输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"))
- print('示例2 F输出:',solve(s1 = "", s2 = "", s3 = "1"))
- print('示例3 F输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"))
- print('之前错的T',solve(s1='aa',s2='a',s3='aaa'))
- print('之前错的T',solve(s1 = "abbcddef", s2 = "accbbbcd", s3 = "abbcddefaccbbbcd"))
- print('之前错的T',solve(s1 = "aba", s2 = "a", s3 = "aaba"))
复制代码
这回,要是再不对,我就……
这回要是再不好使,我就……
我就……
我就吃饭去!(嗯?你以为呢?) |
|