天天看点

leetcode 242 :Valid Anagram

1、原题如下

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.

2、解题如下

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size()==t.size()&&s.size()==)
            return true;
        if(s.size()!=t.size())
            return false;
        int a[]={};
        int b[]={};
        for(int i=;i<s.size();i++)
        {
            char m=s[i]-'a';
            a[m]++;
        }
        for(int j=;j<t.size();j++)
        {
            char n=t[j]-'a';
            b[n]++;
        }
        for(int k=;k<;k++)
            {
                if(a[k]!=b[k])
                    return false;
            }
        return true;
    }
};
           

3、解析

通过读题可以看出本题并不复杂,但是一旦转换成数组来解决就比较麻烦,如上面的解决方案~但是优点是不适用任何algorithm头文件中的函数(其实如上的算法也在一定程度上解决了sort排序的功能)

当然,本题有更好的解法,但需要添加algorithm头文件,如下

if (s.size() != t.size())return false;

    sort(s.begin(), s.end()); sort(t.begin(), t.end());

    return s == t;
           

以上参考:https://leetcode.com/discuss/57754/3-lines-c-accepted-solution

以下粘贴sort()函数的用法

MSDN中的定义:
template<class RanIt>
void sort(RanIt first, RanIt last); //--> 1)
template<class RanIt, class Pred>
void sort(RanIt first, RanIt last, Pred pr); //--> 2)

头文件:
#include <algorithm>
using namespace std;

默认的sort函数是按升序排。对应于)
sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址
可以自己写一个cmp函数,按特定意图进行排序。对应于)
例如:
int cmp(const int &a, const int &b){
    if (a > b)
        return ;
    else
        return ;
}
sort(a,a+n,cmp);
是对数组a降序排序
又如:
int cmp(const POINT &a, const POINT &b){
    if (a.x < b.x)
        return ;
    else
    if (a.x == b.x){
        if (a.y < b.y)
            return ;
        else
            return ;
    }
    else
        return ;
}
sort(a, a + n, cmp);
是先按x升序排序,若x值相等则按y升序排
           

以上参考:http://blog.csdn.net/fly_yr/article/details/18894549

4、总结

有空应该加强STL的学习,对你的编程水平的提升会有很大的帮助~