letecode [242] - Valid Anagram

 Given two strings s and , 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

题目大意

  给定两个字符串,判断t是否是s的字母异位词。

理  解:

  题目说明可以假设字符串中的是小写字母,可以定义一个数组arr[26]记录每个字母出现的次数,初始化为0,遍历s[i]时每碰到一个元素即+1;

  遍历t[i]时每碰到一个元素即-1,当某个值<0即返回false。遍历完后检查是不是数组所有元素均为0.

  考虑字符串中的字符是任意的,这里用multiset处理,遍历s时存入集合中,遍历t时从集合中删除,若遍历t时未找到某个元素,即返回false。

代 码 C++:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.length()!=t.length()) return false;
        multiset<char> m_set;
        multiset<char>::iterator it;
        int i=0;
        while(s[i]!='\0'){
            m_set.insert(s[i]);
            ++i;
        }
        i = 0;
        while(t[i]!='\0'){
            it = m_set.find(t[i]);
            if(it == m_set.end()){
                return false;
            }else{
                m_set.erase(it);
            }
            ++i;
        }
        return true;
    }
};

运行结果:

  执行用时 :100 ms, 在所有C++提交中击败了6.24%的用户

  内存消耗 :17.5 MB, 在所有C++提交中击败了5.14%的用户
posted @ 2019-06-14 17:04  lpomeloz  阅读(99)  评论(0编辑  收藏  举报