鱼C论坛

 找回密码
 立即注册
查看: 7046|回复: 53

[技术交流] Python:每日一题 79(答题领鱼币)

[复制链接]
发表于 2017-8-16 16:48:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 新手·ing 于 2017-8-17 12:25 编辑







题目:

给定两个字符串 s1 和 s2 如果s1 内的字符通过重新组合后能成为 s2返回True
否则返回False

要求:

分别写出s1内的字符可以重复使用和不可以重复使用时的答案




答案:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-8-16 17:35:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-16 20:02:50 | 显示全部楼层
新手,借鉴一下,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 20:42:24 | 显示全部楼层
本帖最后由 chunchun2017 于 2017-8-16 20:47 编辑
  1. def FX(s1,s2):
  2.     if(set(s1.strip())==set(s2.strip())):
  3.             print('True')
  4.             if(len(s1)==len(s2)):
  5.               print('s1内的字符不可以重复使用构成s2')
  6.             else:
  7.               print('s1内的字符可以重复使用构成s2'')
  8.     else:
  9.             print('False')
  10. s1=input('请输入字符串S1:')
  11. s2=input('请输入字符串S2:')
  12. FX(s1,s2)
复制代码


运行结果:
============== RESTART: C:\Users\每日一题\79.py ==============
请输入字符串S1:I am Boy
请输入字符串S2:I am a Boy
True
s1内的字符可以重复使用构成s2
>>>

============== RESTART: C:\Users\每日一题\79.py ==============
请输入字符串S1:aaaa
请输入字符串S2:bbbb
False
>>>
============== RESTART: C:\Users\每日一题\79.py ==============
请输入字符串S1:abcd
请输入字符串S2:abcdddd
True
s1内的字符可以重复使用构成s2
>>>
============== RESTART: C:\Users\每日一题\79.py ==============
请输入字符串S1:abcd
请输入字符串S2:dbca
True
s1内的字符不可以重复使用构成s2
>>>

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
MSK + 5 + 5 加油~

查看全部评分

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

使用道具 举报

发表于 2017-8-16 20:50:55 | 显示全部楼层
发了答案后,再看到大神给出的答案,才发现自己理解的和题目原意有点差别,自己理解的是dbca重新排列可以组成abcd,不需要重复使用字符;dbca重新排列并且重复使用字符,可以构成abbbcd;dbca重新排列不能构成dbcae,哈哈,不过总体思路上没有问题的,继续膜拜大神!

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
1847015249 + 1 + 1 + 1 热爱鱼C^_^

查看全部评分

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

使用道具 举报

发表于 2017-8-16 21:13:27 | 显示全部楼层
  1. def chongfu(s1, s2):
  2.         return set(s2)<set(s1)

  3. def buchongfu(s1, s2):
  4.         from collections import Counter
  5.         for s_s2, n_s2 in Counter(s2).items():
  6.                 if s_s2 in s1:
  7.                         if s1.count(s_s2) < n_s2:
  8.                                 return False
  9.                 else:
  10.                         return False
  11.         return True

  12. print(chongfu('abcd', 'aab'))

  13. print(buchongfu('abcd', 'aab'))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-8-17 01:39:24 | 显示全部楼层
  1. s1 = input("输入S1字符串: ")
  2. s2 = input("输入S2字符串: ")

  3. if set(s1) == set(s2):
  4.     print("result = True")
  5.     if len(s1) == len(s2):
  6.         print("s1内字符串可以重複使用时, 可以通过组合成为s2")
  7.         print("s1内字符串不可以重複使用时, 亦可以通过组合成为s2")
  8.     else:
  9.         print("s1内字符串可以重複使用时, 可以通过组合成为s2")
  10.         print("s1内字符串不可以重複使用时, 无法通过组合成为s2")
  11. else:
  12.     print("result = False")
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-8-17 06:10:07 | 显示全部楼层
能不能给一些例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 10:16:31 | 显示全部楼层

假设
  1. s1 = 'oelh'
  2. s2='hello'
复制代码

当s1内的字符可以重复使用时,s1可以重新排列组成s2
当不可以重复使用时,不可以重新排列组成s2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 12:48:59 | 显示全部楼层
第一种跟@jerryxjr1220 一样。
  1. s1 = 'oelhl'
  2. s2='hello'
  3. def fun(s1, s2):
  4.     lst = list(s1)
  5.     for each in s2:
  6.         if each not in lst:
  7.             return False
  8.         lst.remove(each)
  9.     return True
  10. print(fun(s1, s2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 20:37:52 | 显示全部楼层
  1. def tran_list(s1, s2, a1, a2):
  2.     for i in s1:
  3.         a1.append(i)
  4.     for j in s2:
  5.         a2.append(j)
  6.     return a1, a2

  7. def copy(a1, a2):
  8.     flag = True
  9.     for i in range(len(a2)):
  10.         if a2[i] not in a1:
  11.             flag = False
  12.             break
  13.     if flag:
  14.         print("s1内的字符可以重复使用时构成s2")
  15.     else:
  16.         print("s1内的字符即使可以重复使用时也不能构成s2")


  17. def not_copy(a1,a2):
  18.     flag = True
  19.     for i in range(len(a1)):
  20.         if a1[i] in a2:
  21.             a2.remove(a1[i])
  22.         if i == (len(a1)-1):
  23.             if a2:
  24.                 flag = False
  25.     if flag:
  26.         print("s1内的字符可以不重复使用时构成s2")
  27.     else:
  28.         print("s1内的字符不重复使用时不能构成s2")
  29.    
  30. if __name__ == '__main__':
  31.     s1 = 'accd boprty python'
  32.     s2 = 'aabb'
  33.     a1, a2 = [], []
  34.     a1, a2 = tran_list(s1, s2,a1, a2)
  35.     copy(a1, a2)
  36.     not_copy(a1,a2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 21:41:44 | 显示全部楼层
本帖最后由 Greenland 于 2017-8-17 21:45 编辑
  1. def isReusable(s1, s2):
  2.     return set(s1).issuperset(set(s2))

  3. def isReusableStrict(s1, s2):
  4.     source = list(s1)
  5.     for s in s2:
  6.         if source.count(s)>0:
  7.             source.remove(s)
  8.         else:
  9.             return False
  10.     return True
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 21:52:24 | 显示全部楼层
其实我还没学到这
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-18 10:29:56 | 显示全部楼层
  1. def make_up(s1,s2,reUseFlag):
  2.     map = {}
  3.     for item in s1:
  4.         if item not in map.keys():
  5.             map[item] = 0
  6.         map[item]+= 1
  7.     if reUseFlag == 'False':
  8.         for item in s2:
  9.             if item in map.keys():
  10.                 if(map[item] > 0):
  11.                     map[item] -= 1
  12.                 else:
  13.                     return False
  14.             else:
  15.                 return False
  16.         return True
  17.     else:
  18.         for item in s2:
  19.             if item not in map.keys():
  20.                     return False
  21.         return True
复制代码

用reUseFlag=False 表示不可重用模式,True代表可重用模式
>>> make_up('---..-','..----','True')
True
>>> make_up('---..-','..----','False')
True

>>> make_up('hello world','hello  world','False')
False
>>> make_up('hello world','hello  world','True')
True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-18 10:37:32 | 显示全部楼层
当我看到楼主的答案时,我惊呆了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-18 23:09:29 | 显示全部楼层
# s1 能组合成为s2   可以重复
s1 = "12123"
s2 = "132131"
for char in s1:
    if char in s2:
        pass
    else:
        
        print(False)
        break
else:
    print(True)

# s1能组合成s2不能重复
s1 = "11234456"
s2 = "112343456"
for char in s1:
    if char in s2 and s1.count(char) >= s2.count(char):
        pass
    else:
        print(False)
        break
else:
    print(True)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 07:46:30 | 显示全部楼层
s1=input("input s1:")
s2=input("input s2:")
logo=False
for x in s2:
    print(x)
    for y in s1:
        print(y)
        if x == y:
            logo=True
            print(logo)
            break
        else:
            logo=False
            print(logo)
    if logo == False:
        break
if logo:
    print(logo)
else:
    print(logo)


要求没看懂   先看看大神的答案再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 11:47:24 | 显示全部楼层
  1. def repeat(s1, s2):
  2.     if set(s1) == set(s2):
  3.         temp = list(set(s1))
  4.         s1 = list(s1)
  5.         s2 = list(s2)
  6.         for each in temp:
  7.             s1.remove(each)
  8.             s2.remove(each)
  9.         if s1 == s2:
  10.             return '当s1中的字符重复可以使用时,可以组合成s2\n不可以重复使用时也可以组合成s2'
  11.         else:
  12.             return '当s1中的字符重复可以使用时,可以组合成s2\n不可以重复使用时则不可以组合成s2'
  13.     else:
  14.         return 's1不能组合为s2'


  15. print(repeat('oelh', 'hello'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 12:06:10 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-20 12:00:31 | 显示全部楼层
s1 能成为 s2 是指包含还是相等呢?
没例子说明,那我假设是相等啦
  1. # 不可重复利用时,只要sorted后相等
  2. def check_combine(s_1,s_2):
  3.     return sorted(s_1) == sorted(s_2)

  4. # 可重复利用时,就是集合元素相等
  5. def check_recombine(s_1,s_2):
  6.     return set(s_1) == set(s_2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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