鱼C论坛

 找回密码
 立即注册
查看: 9692|回复: 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 编辑
def FX(s1,s2):
    if(set(s1.strip())==set(s2.strip())):
            print('True')
            if(len(s1)==len(s2)):
              print('s1内的字符不可以重复使用构成s2')
            else:
              print('s1内的字符可以重复使用构成s2'')
    else:
            print('False')
s1=input('请输入字符串S1:')
s2=input('请输入字符串S2:')
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 | 显示全部楼层
def chongfu(s1, s2):
        return set(s2)<set(s1)

def buchongfu(s1, s2):
        from collections import Counter
        for s_s2, n_s2 in Counter(s2).items():
                if s_s2 in s1:
                        if s1.count(s_s2) < n_s2:
                                return False
                else:
                        return False
        return True

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

print(buchongfu('abcd', 'aab'))

评分

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

查看全部评分

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

使用道具 举报

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

if set(s1) == set(s2):
    print("result = True")
    if len(s1) == len(s2):
        print("s1内字符串可以重複使用时, 可以通过组合成为s2")
        print("s1内字符串不可以重複使用时, 亦可以通过组合成为s2")
    else:
        print("s1内字符串可以重複使用时, 可以通过组合成为s2")
        print("s1内字符串不可以重複使用时, 无法通过组合成为s2")
else:
    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 | 显示全部楼层

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

使用道具 举报

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

使用道具 举报

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

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


def not_copy(a1,a2):
    flag = True
    for i in range(len(a1)):
        if a1[i] in a2:
            a2.remove(a1[i])
        if i == (len(a1)-1):
            if a2:
                flag = False
    if flag:
        print("s1内的字符可以不重复使用时构成s2")
    else:
        print("s1内的字符不重复使用时不能构成s2")
    
if __name__ == '__main__':
    s1 = 'accd boprty python'
    s2 = 'aabb'
    a1, a2 = [], []
    a1, a2 = tran_list(s1, s2,a1, a2)
    copy(a1, a2)
    not_copy(a1,a2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

发表于 2017-8-18 10:29:56 | 显示全部楼层
def make_up(s1,s2,reUseFlag):
    map = {}
    for item in s1:
        if item not in map.keys():
            map[item] = 0
        map[item]+= 1
    if reUseFlag == 'False':
        for item in s2:
            if item in map.keys():
                if(map[item] > 0):
                    map[item] -= 1
                else:
                    return False
            else:
                return False
        return True
    else:
        for item in s2:
            if item not in map.keys():
                    return False
        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 | 显示全部楼层
def repeat(s1, s2):
    if set(s1) == set(s2):
        temp = list(set(s1))
        s1 = list(s1)
        s2 = list(s2)
        for each in temp:
            s1.remove(each)
            s2.remove(each)
        if s1 == s2:
            return '当s1中的字符重复可以使用时,可以组合成s2\n不可以重复使用时也可以组合成s2'
        else:
            return '当s1中的字符重复可以使用时,可以组合成s2\n不可以重复使用时则不可以组合成s2'
    else:
        return 's1不能组合为s2'


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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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