题目:
Given two strings s and t , write a function to determine if t is an anagram of s.
Example 1:Input: s = "anagram", t = "nagaram" Output: true
Example 2:
Input: s = "rat", t = "car" Output: false Note: You may assume the string contains only lowercase alphabets.
Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case?
解释:
判断t是否是s的一种排列。
解法1:
from collections import Counter
class Solution:
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return Counter(s)==Counter(t)
解法2,速度较慢:
python代码:
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return sorted(s)==sorted(t)
c++代码:
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(),s.end());
sort(t.begin(),t.end());
return s==t;
}
};
解法3:
python代码:
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s)!=len(t):
return False
letters='qwertyuiopasdfghjklzxcvbnm'
for l in letters:
if s.count(l)!=t.count(l):
return False
return True
c++代码:
class Solution {
public:
bool isAnagram(string s, string t) {
string line="qwertyuiopppasdfghjklzxcvbnm";
for(auto letter:line)
{
if (count(s.begin(),s.end(),letter)!=count(t.begin(),t.end(),letter))
return false;
}
return true;
}
};
总结:
这种排列的题目有好几种套路,sort()
,count()
都是常见的。