一个字符串比较的题
看到一个据说是腾讯面试时有关一个字符串比较的题:
假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。要求高效!
当然考虑用高效快捷的Python来练一练,看到有人很快就写下了以下代码:
>>> sorted('abcda') == sorted('adabc')
True
True
Geek的玩法很多,除了有人先提到的上面做法,我还想到以下方法也挺Geek:
>>> from collections import Counter
>>> Counter('abcda') == Counter('adabc')
True
(Counter类在Python 2.7里被新增进来)
看看结果,是一样的:
>>> Counter('abcda')
Counter({'a': 2, 'c': 1, 'b': 1, 'd': 1})
>>> Counter('adabc')
Counter({'a': 2, 'c': 1, 'b': 1, 'd': 1})
Counter({'a': 2, 'c': 1, 'b': 1, 'd': 1})
>>> Counter('adabc')
Counter({'a': 2, 'c': 1, 'b': 1, 'd': 1})
另外,可以稍微格式化输出结果看看,用到了Counter类的elements()方法:
>>> list(Counter('abcda').elements())
['a', 'a', 'c', 'b', 'd']
>>> list(Counter('adabc').elements())
['a', 'a', 'c', 'b', 'd']
['a', 'a', 'c', 'b', 'd']
>>> list(Counter('adabc').elements())
['a', 'a', 'c', 'b', 'd']
谁说Python只有一种方式?现在的Python在保持简捷高效的一贯风格的同时,玩法也越来越多了。