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.
最简单直接的方法就是直接HashMap统计即可。
代码如下:
import java.util.HashMap;
/*
* 注意使用Map数据结构
* */
public class Solution
{
public boolean isAnagram(String s, String t)
{
if(s==null && t==null)
return true;
else if(s==null && t!=null || s!=null && t==null || s.length()!=t.length())
return false;
HashMap<Character, Integer> map1=new HashMap<>();
HashMap<Character, Integer> map2=new HashMap<>();
for(int i=0;i<s.length();i++)
{
if(map1.containsKey(s.charAt(i)))
map1.put(s.charAt(i), map1.get(s.charAt(i))+1);
else
map1.put(s.charAt(i), 0);
if(map2.containsKey(t.charAt(i)))
map2.put(t.charAt(i), map2.get(t.charAt(i))+1);
else
map2.put(t.charAt(i), 0);
}
return map1.equals(map2);
}
}
下面是C++的做法,就是使用一个26大小的数组纪录每一个字母出现的频率,也可以直接使用map做记录然后比较
代码如下:
#include <iostream>
#include <alogrithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
class Solution
{
public:
bool isAnagram(string s, string t)
{
vector<int> a(26,0);
for (char i : s)
a[i - 'a']++;
for (char i : t)
{
a[i - 'a']--;
if (a[i - 'a'] < 0)
return false;
}
for (int i : a)
{
if (i > 0)
return false;
}
return true;
}
};