242. Valid Anagram

问题:
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.

我的解答:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.size() != t.size())
            return false;
        sort(s.begin(),s.end());
        sort(t.begin(),t.end());
        int a = s.size();
        while (a--)
        {
            if (s[a] != t[a])
            return false;
        }
            return true;
    }
};

解释:
拿到这道题,首先想到的是用排序把两个字符串拍一下序,这样里面的东西都会变成有序的了,如果他们是回文的话,那么就会变成每一个元素都相等的string。由于不想自己写排序算法,所以就查了一下stl库里面的排序,发现有sort,所以就用sort来排序了。后来想到,用快排会不会更快,就查用快排的函数qsort。

结果发现更慢了,后来发现sort的具体实现也是类似于快排的。

我的qsort实现方法:

class Solution {
public:

    bool isAnagram(string s, string t) {
        if (s.size() != t.size())
        return false;
    qsort(&t[0], t.size() , sizeof(t[0]), comp);
    qsort(&s[0], s.size() , sizeof(s[0]), comp);
    int a = s.size();
    while (a--)
    {
        if (s[a] != t[a])
            return false;
    }
    return true;

    }
private:
      static int comp(const void*a, const void*b)
    {
    return  strcmp((char*)a, (char*)b);
    }
};

注意:
sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。Line 26: invalid use of non-static member function
因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。

qsort(),sort()用法总结

你可能感兴趣的:(242. Valid Anagram)