一個字串比較的題

2gua發表於2012-09-12

enter image description here

看到一個據說是騰訊面試時有關一個字串比較的題:

假設兩個字串中所含有的字元和個數都相同我們就叫這兩個字串匹配,比如:abcda和adabc,由於出現的字元個數都是相同,只是順序不同,所以這兩個字串是匹配的。要求高效!

當然考慮用高效快捷的Python來練一練,看到有人很快就寫下了以下程式碼:

>>> sorted('abcda') == sorted('adabc')
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類的elements()方法:

>>> list(Counter('abcda').elements())
['a', 'a', 'c', 'b', 'd']
>>> list(Counter('adabc').elements())
['a', 'a', 'c', 'b', 'd']

誰說Python只有一種方式?現在的Python在保持簡捷高效的一貫風格的同時,玩法也越來越多了。

相關文章