1. 程式人生 > >242. Valid Anagram(python+cpp)

242. Valid Anagram(python+cpp)

題目:

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()都是常見的。