Codewars第四天--Two to One

本文介绍了一个简单的Codewars编程挑战,即合并两个字符串,并去除重复字符,最终返回一个按字母顺序排列的新字符串。文章提供了两种解决方案,一种是通过列表推导和排序实现,另一种更简洁的方法则是利用集合(set)和sorted函数。

Codewars第四天–Two to One

题目描述:
Take 2 strings s1 and s2 including only letters from ato z. Return a new sorted string, the longest possible, containing distinct letters,
each taken only once - coming from s1 or s2. #Examples: a = "xyaabbbccccdefww" b = "xxxxyyyyabklmopq" longest(a, b) -> "abcdefklmopqwxy"
a = "abcdefghijklmnopqrstuvwxyz" longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"

想的思路是将字符串合并为一个,然后依次判断加入到一个新的列表中,然后得到没有重复字符的列表,对其排序转换输出即可。代码如下:

def longest(s1, s2):
    # your code
    z = s1 + s2
    result = []
    for i in z:
        if i not in result:
            result.append(i)
    result.sort()
    return "".join(result)

*遇到的问题,在使用"".join() 将列表转换为字符串的过程中,开始使用了"".join(result.soirt()) 语句,出现了类型错误:

TypeError: can only join an iterable

原因是join里面不能出现函数,需要单独提出了排序后,再使用join进行操作。

最佳做法:

def longest(a1, a2):
    return "".join(sorted(set(a1 + a2)))

使用sorted进行排序,set()可以创建一个无序不重复元素集,这样就起到了去重作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值