zoukankan      html  css  js  c++  java
  • 242. Valid Anagram

    Problem statement

    Given two strings s and t, write a function to determine if t is an anagram of s.

    For example,
    s = "anagram", t = "nagaram", return true.
    s = "rat", t = "car", return false.

    Note:
    You may assume the string contains only lowercase alphabets.

    Solution one: hash table/array(AC)

    General idea:

    • if the size of two strings is not equal, return false;
    • Enumerate each element of two strings, put each element into hash table/array.
    • compare the hash table/array

    Time complexity is O(n), space complexity is O(n)

    hash table version

    class Solution {
    public:
        bool isAnagram(string s, string t) {
            if(s.size() != t.size()){
                return false;
            }
            unordered_map<char, int> dict;
            for(string::size_type ix = 0; ix < s.size(); ix++){
                dict[s[ix]]++;
            }
            for(string::size_type ix = 0; ix < t.size(); ix++){
                if(dict.find(t[ix]) != dict.end()){
                    dict[t[ix]]--;
                    if(dict[t[ix]] == 0){
                        dict.erase(t[ix]);
                    }
                }
            }
            return dict.empty();
        }
    };

    array version

    class Solution {
    public:
        bool isAnagram(string s, string t) {
            if(s.size() != t.size()){
                return false;
            }
            int size = s.size();
            vector<int> sv(26, 0), tv(26, 0);
            for(int i = 0; i < size; i++){
                sv[s[i] - 'a']++;
                tv[t[i] - 'a']++;
            }
            return sv == tv;
        }
    };

    Solution two: sort and compare

    • Sort two strings
    • compare whether they are equal

    Time complexity is O(nlgn), space complexity is O(1)

    class Solution {
    public:
        bool isAnagram(string s, string t) {
            sort(s.begin(), s.end());
            sort(t.begin(), t.end());
            return s == t;
        }
    };
  • 相关阅读:
    2月3日
    照片测试
    家属签证计时
    我来了
    090204 阴天
    重要提醒to 小爱
    小毛小毛
    C++Primer学习日程
    资料库字段存储文件记录的方式
    本日有点忙
  • 原文地址:https://www.cnblogs.com/wdw828/p/7068190.html
Copyright © 2011-2022 走看看