问题描述:
判断两个字符串是否是 anagram
(字典解释:相同字母异序词),就是两个字符串,所用的字母及其个数都是一样,但是它们字母的顺序不一样。
问题分析:
使用Python 中的 Counter
。(后来发现这个题目是LeetCode:242. Valid Anagram)
Python3实现:
# @Time :2019/02/10
# @Author :LiuYinxing
# 使用Python自带函数
from collections import Counter
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return Counter(s) == Counter(t)
if __name__ == '__main__':
solu = Solution()
print(solu.isAnagram('abacd', 'acdab'))
后来发现这个题目是LeetCode:242. Valid Anagram,现在,接着在介绍几种方法:
# @Time :2019/02/10
# @Author :LiuYinxing
# 使用字典的方法
from collections import defaultdict
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s) != len(t):
return False
counts = defaultdict(int)
for i in range(len(s)):
counts[s[i]] += 1
counts[t[i]] -= 1
for k, v in counts.items():
if v != 0:
return False
return True
# @Time :2019/02/10
# @Author :LiuYinxing
# 使用数组
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s) != len(t):
return False
counts = [0] * 26 # 题目已经给出,只包含小新字母
for i in range(len(s)):
counts[ord(s[i])-97] += 1 # ord('a')=97
counts[ord(t[i])-97] -= 1
for c in counts:
if c != 0:
return False
return True
if __name__ == '__main__':
solu = Solution()
print(solu.isAnagram('abacd', 'acdab'))
声明: 好记性,不如烂笔头,总结学习,有问题可以批评指正,大神可以略过哦。