• 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;
        }
    };
  • 相关阅读:
    代码规范圣战
    代码复审结果
    个人工程总结
    第一周个人博客作业
    软工课程总结
    软件工程课程的建议
    大泥球你好~
    第一次会议记录
    软件工程的瀑布, 大泥球, 教堂,集市,和银弹
    vs2013——单元测试&& 性能图
  • 原文地址:https://www.cnblogs.com/wdw828/p/7068190.html
Copyright © 2020-2023  润新知