给定两个字符串 s1 和 s2,我们希望可视化这两个字符串的差异。我们只考虑小写字母(a到z)。首先,让我们计算 s1 和 s2 中每个小写字母的频率。
s1 = "A aaaa bb c"
s2 = "& aaa bbb c d"
s1 拥有 4个 'a', 2个 'b', 1个 'c'
s2 拥有 3个 'a', 3个 'b', 1个 'c', 1个 'd'
因此,s1 和 s2 中 ‘a’ 的最大值是 s1 中的 4;“b”的最大值为 s2 中的 3。在下文中,当字母的出现次数最大值不大于 1 时,我们将不统计。
我们可以在以下字符串中恢复 s1 和 s2 之间的差异:
两个列表中最大数量的a的个数是4,而最大的个数是在1中,所以表示为"1:aaaa"
,两个列表中最大数量的b的个数是3,最大的个数是在2中,所以表示为"2:bbb"
,其他字母长度为1,忽略,最后排序后用"/"连接起来结果为 "1:aaaa/2:bbb"
任务是生成一个字符串,其中s1或s2的每个小写字母出现与其最大值一样多的次数,如果此最大值严格大于1;这些字母将以字符串的编号为前缀,如果它们的最大值同时分布在 s1 和 s2 中,则前缀为"=:"
在结果中,子字符串(子字符串例如为2:nnnnn或1:hhh;它包含前缀)将按其长度的递减顺序排列,当它们具有相同的长度时按升序词典顺序排序;不同的组将由“/”分隔。具体来讲,先根据最大的字母的长度进行降叙排序,然后再针对相同长度的数据根据归属第一、第二和相等的顺序排序,最后再把相同的归属的同长度元素进行字母序升序排序,最后使用"/"进行分隔。
详细的例子如下。
s1 = "my&friend&Paul has heavy hats! &"
s2 = "my friend John has many many friends &"
mix(s1, s2) --> "2:nnnnn/1:aaaa/1:hhh/2:mmm/2:yyy/2:dd/2:ff/2:ii/2:rr/=:ee/=:ss"
s1 = "mmmmm m nnnnn y&friend&Paul has heavy hats! &"
s2 = "my frie n d Joh n has ma n y ma n y frie n ds n&"
mix(s1, s2) --> "1:mmmmmm/=:nnnnnn/1:aaaa/1:hhh/2:yyy/2:dd/2:ff/2:ii/2:rr/=:ee/=:ss"
s1="Are the kids at home? aaaaa fffff"
s2="Yes they are here! aaaaa fffff"
mix(s1, s2) --> "=:aaaaaa/2:eeeee/=:fffff/1:tt/2:rr/=:hh"
题目难度:一般
题目来源:https://www.codewars.com/kata/5629db57620258aa9d000014
def mix(s1: str, s2: str) -> str:
# your code here
assert mix("Are they here", "yes, they are here") == "2:eeeee/2:yy/=:hh/=:rr"
assert mix("Sadus:cpms>orqn3zecwGvnznSgacs","MynwdKizfd$lvse+gnbaGydxyXzayp") == '2:yyyy/1:ccc/1:nnn/1:sss/2:ddd/=:aa/=:zz'
assert mix("looping is fun but dangerous", "less dangerous than coding") == "1:ooo/1:uuu/2:sss/=:nnn/1:ii/2:aa/2:dd/2:ee/=:gg"
assert mix(" In many languages", " there's a pair of functions") == "1:aaa/1:nnn/1:gg/2:ee/2:ff/2:ii/2:oo/2:rr/2:ss/2:tt"
assert mix("Lords of the Fallen", "gamekult") == "1:ee/1:ll/1:oo"
assert mix("hogwarts", "hogwarts") == ""
assert mix("A generation must confront the looming ", "hogwarrts") == "1:nnnnn/1:ooooo/1:tttt/1:eee/1:gg/1:ii/1:mm/=:rr"
assert mix("Are the kids at home? aaaaa fffff", "Yes they are here! aaaaa fffff") == "=:aaaaaa/2:eeeee/=:fffff/1:tt/2:rr/=:hh"
assert mix("mmmmm m nnnnn y&friend&Paul has heavy hats! &", "my frie n d Joh n has ma n y ma n y frie n ds n&") == "1:mmmmmm/=:nnnnnn/1:aaaa/1:hhh/2:yyy/2:dd/2:ff/2:ii/2:rr/=:ee/=:ss"