鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 267

[复制链接]
 楼主| 发表于 2019-11-2 19:20:09 | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 19:11
我这回又改了改,应该好使了:

这回,要是再不对,我就……

解答错误

输入:s1 = "abcabc", s2 = "ac", s3 = "aabcabcc"
打印:调试 4 顺序不对
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 19:25:00 | 显示全部楼层
  1. def f267(s1, s2, s3):
  2.     len_s1, len_s2 = len(s1), len(s2)
  3.     if len_s1 + len_s2 != len(s3):
  4.         return False

  5.     dp = [True] * (len_s2 + 1)  # 其实只有 dp[0] = True 有用
  6.     for i in range(len_s2):  # 降维的时候,多删了这个 for 语句,然后一直不对
  7.         dp[i + 1] = dp[i] and s2[i] == s3[i]  # 首行初始化
  8.     for i in range(len_s1):
  9.         dp[0] &= s1[i] == s3[i]  # 首列初始化
  10.         for j in range(len_s2):
  11.             dp[j + 1] = (dp[j + 1] and s1[i] == s3[i + j + 1]) or \  # 相当于“若对应相等,把上面的值拿下来”
  12.                     (dp[j] and s2[j] == s3[i + j + 1])  # 若对应相等,把左边的值拿过来
  13.     return dp[-1]
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
zltzlt + 2 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 19:46:25 | 显示全部楼层

嗯,刚吃完
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 19:47:59 | 显示全部楼层

恭喜通过!

执行用时:101 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 19:53:45 | 显示全部楼层
zltzlt 发表于 2019-11-2 19:20
解答错误

输入:s1 = "abcabc", s2 = "ac", s3 = "aabcabcc"

我就改一个符号,这个测试数据就对了
这会儿再不好使,我……我……我打拳皇去!
  1. def differ(a:list,b:list):
  2.     for i in range(min((len(a),len(b)))):
  3.         if a[i] != b[i]:
  4.             return i
  5.     return min((len(a),len(b)))
  6. def solve(s1:str,s2:str,s3:str)->bool:
  7.     if len(s3) != len(s1+s2):
  8.         #print('调试',1,'长度不对')
  9.         return False
  10.     elif (s3 == s1+s2)or(s3==s2+s1):
  11.         #print('调试',2,'算拼接')
  12.         return True
  13.     a=set(s1+s2)
  14.     for i in a:
  15.         if s1.count(i) + s2.count(i) != s3.count(i):
  16.             #print('调试',3,'数儿不对')
  17.             return False
  18.     s1,s2,s3 = list(s1),list(s2),list(s3)
  19.     if s1[0] == s2[0]:
  20.         num = differ(s1,s3)
  21.         num1 = differ(s2,s3)
  22.         if num == num1:
  23.             if len(s1) <= len(s2):#这儿把大于号改成小于号,得了。
  24.                 flg = 1
  25.             else:
  26.                 flg = 2
  27.         elif num > num1:
  28.             flg = 1
  29.         else:
  30.             flg = 2
  31.     elif s1[0] == s3[0]:
  32.         flg = 1
  33.     elif s2[0] == s3[0]:
  34.         flg = 2
  35.     if flg == 1:
  36.         s1.pop(0)
  37.     elif flg == 2:
  38.         s2.pop(0)
  39.     s3.pop(0)
  40.     #print('调试',s1,s2,s3)
  41.     changed = False
  42.     while s1 or s2:
  43.         if s1 == []:
  44.             if s2[0] == s3[0]:
  45.                 s2.pop(0)
  46.             else:
  47.                 #print('调试',4,'顺序不对')
  48.                 return False
  49.         elif s2 == []:
  50.             if s1[0] == s3[0]:
  51.                 s1.pop(0)
  52.             else:
  53.                 #print('调试',4,'顺序不对')
  54.                 return False
  55.         elif flg == 1:
  56.             if s2[0] == s3[0]:
  57.                 s2.pop(0)
  58.                 if not changed:
  59.                     changed = True
  60.             elif s1[0] == s3[0]:
  61.                 s1.pop(0)
  62.             else:
  63.                 #print('调试',4,'顺序不对')
  64.                 return False
  65.         elif flg == 2:
  66.             if s1[0] == s3[0]:
  67.                 s1.pop(0)
  68.                 if not changed:
  69.                     changed = True
  70.             elif s2[0] == s3[0]:
  71.                 s2.pop(0)
  72.             else:
  73.                 #print('调试',4,'顺序不对')
  74.                 return False
  75.         s3.pop(0)
  76.     else:
  77.         #print('调试',5,'循环结束,能走到这儿,大概率是对的,但咱不赌')
  78.         return changed

  79. if __name__ == '__main__':
  80.     print('示例1 T输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"))
  81.     print('示例2 F输出:',solve(s1 = "", s2 = "", s3 = "1"))
  82.     print('示例3 F输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"))
  83.     print('之前错的T',solve(s1='aa',s2='a',s3='aaa'))
  84.     print('之前错的T',solve(s1 = "abbcddef", s2 = "accbbbcd", s3 = "abbcddefaccbbbcd"))
  85.     print('之前错的T',solve(s1 = "aba", s2 = "a", s3 = "aaba"))
  86.     print('之前错的T',solve(s1 = "abcabc", s2 = "ac", s3 = "aabcabcc"))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 19:55:51 | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 19:53
我就改一个符号,这个测试数据就对了
这会儿再不好使,我……我……我打拳皇去!

解答错误

输入:s1 = "sdfjas;dfjoisdufzjkndfasdkfja;sdfa;dfa;dfaskdjhfasdhjdfakhdgfkajdfasdjfgajksdfgaksdhfasdkbfjkdsfbajksdfhakjsdfbajkdfbakdjsfgaksdhgfjkdsghfkdsfgadsjfgkajsdgfkjasdfh", s2 = "dfnakdjnfjkzghdufguweygfasjkdfgb2gf8asf7tgbgasjkdfgasodf7asdgfajksdfguayfgaogfsdkagfsdhfajksdvfbgkadsghfakdsfgasduyfgajsdkfgajkdghfaksdgfuyadgfasjkdvfjsdkvfakfgauyksgfajkefgjkdasgfdjksfgadjkghfajksdfgaskdjfgasjkdgfuyaegfasdjkfgajkdfygadjskfgjkadfg", s3 = "sdfjas;dfjoisdfnakdjnfjkzghdufguwdufzjkeygfasjkdfgb2gf8asf7ndtgbgasjkdfgasodf7asdfgfajkasdksdfguayfgaogfsdkagfsfjadhfajksdvfbgkadsghfa;sdkdsfgasduyfgajsdkfgafajkdghfaksdgfuyadgfas;dfjkdvfjsdkvfakfgauyksa;dgfajkefgjkdasgfdjksffaskdjhfasdhjdfakhdgadjkghfajgfkajdfksdfgaskdjfgasjkdgfuasdjfgajksdfgaksdhfasdkbfjkdsfbajksdfyaegfasdjkfgajkdfygadjskfgjkadfghakjsdfbajkdfbakdjsfgaksdhgfjkdsghfkdsfgadsjfgkajsdgfkjasdfh"
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 20:03:25 | 显示全部楼层
122815306 发表于 2019-11-2 14:47
啊 应该在最前面加上这两行
    if not (s1 and s2 and s3):
        return s3==s1+s2

解答错误

输入:s1 = "abbcddef", s2 = "accbbbcd", s3 = "abbcddefaccbbbdc"
输出:True
预期结果:False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 20:05:06 | 显示全部楼层

解答错误

输入:s1 = '', s2 = '', s3 = ''
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 20:20:19 | 显示全部楼层
zltzlt 发表于 2019-11-2 20:05
解答错误

输入:s1 = '', s2 = '', s3 = ''

不可能啊,虽然我知道我的程序确实有问题,遇到分支走错了分支的话会出错,但是三个空字符串的情况我这里是没错的啊。
a =''

func(a,a,a)
Out[19]: True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 20:21:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 20:23:05 | 显示全部楼层

解答错误

输入:s1 = "a", s2 = "", s3 = "a"
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 20:34:58 | 显示全部楼层
本帖最后由 danteer 于 2019-11-2 20:37 编辑
zltzlt 发表于 2019-11-2 20:23
解答错误

输入:s1 = "a", s2 = "", s3 = "a"

奇怪了,我这里输入这个也是没问题的
111.jpg

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1 好吧……

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 23:12:52 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-11-2 23:14 编辑
zltzlt 发表于 2019-11-2 19:55
解答错误

输入:s1 = "sdfjas;dfjoisdufzjkndfasdkfja;sdfa;dfa;dfaskdjhfasdhjdfakhdgfkajdfasdjfgaj ...


好的,我又来了检验代码了,就是行数略多……
  1. def solve(s1:str,s2:str,s3:str)->bool:
  2.     if len(s3) != len(s1+s2):
  3.         #print('调试',1,'长度不对')
  4.         return False
  5.     elif (s3 == s1+s2)or(s3==s2+s1):
  6.         #print('调试',2,'算拼接')
  7.         return True
  8.     a=set(s1+s2)
  9.     for i in a:
  10.         if s1.count(i) + s2.count(i) != s3.count(i):
  11.             #print('调试',3,'数儿不对')
  12.             return False
  13.     #s1,s2,s3 = list(s1),list(s2),list(s3)
  14.     #print('调试',s1,s2,s3)
  15.     while s1 or s2:
  16.         a,b=True,True
  17.         l1,l2 = len(s1),len(s2)
  18.         for i in range(len(s3)):
  19.             if a:
  20.                 if i == l1:
  21.                     a = False
  22.                     num = l1
  23.                 elif s1[i]!=s3[i]:
  24.                     a = False
  25.                     num = i
  26.             if b:
  27.                 if i == l2:
  28.                     b = False
  29.                     num1 = l2
  30.                 elif s2[i]!=s3[i]:
  31.                     b = False
  32.                     num1 = i
  33.             if not(a or b):
  34.                 break
  35.         #print('调试',num,num1)
  36.         if num > num1:
  37.             flg = 1
  38.             if s2:
  39.                 temp = s1.rfind(s2[0],0,num+1)
  40.                 if temp > 0:
  41.                     num = temp
  42.         elif num < num1:
  43.             flg = 2
  44.             if s1:
  45.                 temp = s2.rfind(s1[0],0,num1+1)
  46.                 if temp > 0:
  47.                     num1 = temp
  48.         else:
  49.             if not num:#到末尾,或者顺序不对
  50.                 #print('调试',4,'到末尾,或者顺序不对')
  51.                 return (s3==s1+s2)or(s3==s2+s1)
  52.             else:
  53.                 #print('调试',5,'犹豫')#,s1,s2,s3)
  54.                 flg = 1
  55.         if flg == 1:
  56.             #print('调试',s1[:num])
  57.             s1=s1[num:]
  58.             s3=s3[num:]
  59.         elif flg == 2:
  60.             #print('调试',s2[:num1])
  61.             s2=s2[num1:]
  62.             s3=s3[num1:]
  63.         #print('调试','s1="%s",s2="%s",s3="%s"'%(s1,s2,s3))
  64.     else:
  65.         #print('调试',5,'循环结束,能走到这儿,大概率是对的')
  66.         return True

  67. if __name__ == '__main__':
  68.     print('示例1 T输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"))
  69.     print('示例2 F输出:',solve(s1 = "", s2 = "", s3 = "1"))
  70.     print('示例3 F输出:',solve(s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"))
  71.     print('之前错的T',solve(s1='aa',s2='a',s3='aaa'))
  72.     print('之前错的T',solve(s1 = "abbcddef", s2 = "accbbbcd", s3 = "abbcddefaccbbbcd"))
  73.     print('之前错的T',solve(s1 = "aba", s2 = "a", s3 = "aaba"))
  74.     print('之前错的T',solve(s1 = "abcabc", s2 = "ac", s3 = "aabcabcc"))
  75.     print('之前错的T',solve(s1 = "sdfjas;dfjoisdufzjkndfasdkfja;sdfa;dfa;dfaskdjhfasdhjdfakhdgfkajdfasdjfgajksdfgaksdhfasdkbfjkdsfbajksdfhakjsdfbajkdfbakdjsfgaksdhgfjkdsghfkdsfgadsjfgkajsdgfkjasdfh", s2 = "dfnakdjnfjkzghdufguweygfasjkdfgb2gf8asf7tgbgasjkdfgasodf7asdgfajksdfguayfgaogfsdkagfsdhfajksdvfbgkadsghfakdsfgasduyfgajsdkfgajkdghfaksdgfuyadgfasjkdvfjsdkvfakfgauyksgfajkefgjkdasgfdjksfgadjkghfajksdfgaskdjfgasjkdgfuyaegfasdjkfgajkdfygadjskfgjkadfg", s3 = "sdfjas;dfjoisdfnakdjnfjkzghdufguwdufzjkeygfasjkdfgb2gf8asf7ndtgbgasjkdfgasodf7asdfgfajkasdksdfguayfgaogfsdkagfsfjadhfajksdvfbgkadsghfa;sdkdsfgasduyfgajsdkfgafajkdghfaksdgfuyadgfas;dfjkdvfjsdkvfakfgauyksa;dgfajkefgjkdasgfdjksffaskdjhfasdhjdfakhdgadjkghfajgfkajdfksdfgaskdjfgasjkdgfuasdjfgajksdfgaksdhfasdkbfjkdsfbajksdfyaegfasdjkfgajkdfygadjskfgjkadfghakjsdfbajkdfbakdjsfgaksdhgfjkdsghfkdsfgadsjfgkajsdgfkjasdfh"))
复制代码

这回……要是再不对……我睡一觉起来再改。

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 07:20:22 From FishC Mobile | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 23:12
好的,我又来了检验代码了,就是行数略多……

这回……要是再不对……我睡一觉起来再改。

你改了多少遍了?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-3 07:49:11 | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 23:12
好的,我又来了检验代码了,就是行数略多……

这回……要是再不对……我睡一觉起来再改。

我被你这种执着的精神感动了……

功夫不负有心人,终于通过啦!

执行用时:101 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 11:13:05 | 显示全部楼层
_2_ 发表于 2019-11-3 07:20
你改了多少遍了?!

大概,有这么七八回?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 11:16:41 | 显示全部楼层
zltzlt 发表于 2019-11-3 07:49
我被你这种执着的精神感动了……

功夫不负有心人,终于通过啦!

欧耶!撒花~~
我回复那一节的时候,按时辰算,就是子时,算是第二天了。想法早就有,但聚现为代码的时候,愣是不晓得怎么就出岔子了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 15:38:48 | 显示全部楼层
阴阳神万物主 发表于 2019-11-3 11:16
欧耶!撒花~~
我回复那一节的时候,按时辰算,就是子时,算是第二天了。想法早就有,但聚现为代码的时候 ...

加油,奥里给!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表