242 Valid Anagram
2015-08-05 16:58
246 查看
题目链接:https://leetcode.com/problems/valid-anagram/
题目:
解题思路:
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 中未必有,这种思路却没有反映第二种情况。
题目:
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
相关文章推荐
- Unity2D之Sprite动画相关
- Majority Element II
- Asp.net页面间通过Post方式传递参数
- 全面理解iOS开发中的Scroll View[转]
- VS2013打包安装(InstallShield Limited Edition for Visual Studio 2013 )
- break和continue的区别
- IIS 设置文件可下载
- 【转载】Word2010画布中形状无法使用对齐的解决办法
- semaphore.h
- 通过URL Scheme传递参数
- spring 有参构注入对象。
- 能对齐的数据
- Linux下c编程rename函数导致的问题
- Struts2中Action的传值方式
- 【新浪微博互粉涨粉应用工具大全及技巧】 每天可涨几百至上千粉哦!
- 设计模式 状态模式
- Content-Disposition的使用方法
- Matlab--随机机数的产生
- NSDictionary读取数据类型异常问题.
- Hdu 5352 MZL's City (多重匹配)