面试题 01.01. 判定字符是否唯一

class Solution {
public:
    bool isUnique(string astr) {
        int len = astr.size();
        for(int i=0; i<len; ++i)
        {
            for(int j=i+1; j<len; ++j)
            {
                if(astr[i]==astr[j])
                    return false;
            }
        }
        return true;
    }
};

本题非常简单,但是并没有一次通过。主要错误点在于,没有注意到第二次循环需要从i+1开始,错误的写成了i

面试题 01.02. 判定是否互为字符重排

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.size()!=s2.size()) return false;
        unordered_map<char,int> map;
        for(char c:s1)
        {
            map[c] +=1;
        }
        for(char c:s2)
        {
            map[c] -= 1;
        }
        for(auto x: map)
        {
            if(x.second!=0)
                return false;
        }
        return true;
    }
};

本题思路在与使用map先记录s1后通过计数匹配s2。unordered_map速度比map快。