您的位置:首页 > 其它

242 Valid Anagram

2015-08-05 16:58 246 查看
题目链接:https://leetcode.com/problems/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.


解题思路:

1. 把 s 中的每一个字符当做一个 key 放入到 hashmap 中,value 为 key 的个数。

2. 遍历 t 中的每一个字符,判断 hashmap 中是否已有该 key ,没有返回 false;若该 key 对应 value 的个数大于

1,则 value 自减 1,否则将该 key 从 hashmap 中移除。

3. 遍历完成后,判断 hashmap 是否为空, 为空就返回 true;否则返回 false。

注意:

一开始的思路是,把两个字符串的字符都放入 map 中,之后遍历其中一个 map,看另一个 map 中是否有对应的键,以及值是否相同。这种比较的前提是,先判断两个字符串长度是否相同。

否则这种思路有个缺陷:若 s 为 anagram,t 为 anagramk,遍历 s 映射的 map,这样 s 中有的 key,t 中也有。事实是,t 中有的s 中未必有,这种思路却没有反映第二种情况。

public class Solution {
public boolean isAnagram(String s, String t) {
if(s == null || t == null)
return false;
if(s.length() != t.length())
return false;
if(s.equals("") && t.equals(""))
return true;
HashMap<Character, Integer> map = new HashMap();
int len = s.length();
for(int i = 0; i < len; i ++) {
char key = s.charAt(i);
if(!map.containsKey(key))
map.put(key, 1);
else
map.put(key, map.get(key) + 1);
}
for(int i = 0; i < len; i ++) {
char key = t.charAt(i);
if(!map.containsKey(key))
return false;
else {
if(map.get(key) > 1)
map.put(key, map.get(key) - 1);
else
map.remove(key);
}
}
if(map.isEmpty())
return true;
else
return false;
}
}


32 / 32 test cases passed.
Status: Accepted
Runtime: 424 ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: