// Author : yqtao
// Date : 2016-6.19
// Email :yqtao@whu.edu.cn
/**********************************************************************************
*
* Given two strings s and t, write a function to determine if t is an anagram of s.
* 即判断t是不是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.
*
**********************************************************************************/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//很容易理解的方法,即排序
//但是时间复杂度很高
bool isAnagranm(string &s, string &t)
{
sort(s.begin(), s.end());
sort(t.begin(), t.end());
if (s == t)
return true;
else
return false;
}
//第二种方法,使用哈希表
bool isAnagranm1(string &s, string &t)
{
int map[26] = { 0 };
for (int i = 0; i < s.size(); i++)
map[s[i] - 'a']++;//将字母存放在map的矩阵中
for (int i = 0; i < t.size(); i++)
map[t[i] - 'a']--;
for (int i = 0; i < sizeof(map) / sizeof(map[0]); i++)
if (map[i] != 0)
return false;
return true;//整个map矩阵全为0,则为true
}
int main()
{
string s = "nagaram";
string p = "nagaram";
cout << boolalpha << isAnagranm(s, p) << endl;//80ms
cout << boolalpha << isAnagranm1(s, p) << endl;//12ms
}
Leetcode Valid Anagram高效解法
最新推荐文章于 2024-09-09 22:01:06 发布