Valid Anagram (java)
来源:互联网 发布:淘宝过户服务费 编辑:程序博客网 时间:2024/04/30 15:01
题目:
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.
理解题意:字符串t是字符串s中一些或者全部字母颠倒顺序得到的,就是anagram。
初始想法:用一个hashMap<Integer,Character>
遍历保存s中字符,然后遍历t字符串,若遍历的当前字符不存在map
中,直接返回false
;若字符包含在map
中,则删除改映射。实现上有问题,hashMap
中containsValue(Object value)
函数返回的是布尔值,无法得到key
,就不能通过remove
函数删除映射关系。
正确思路:hashMap<Character, Integer> 遍历保存s中字符
,key
为字符,value
为字符出现的次数。在遍历t中字符时,若当前字符在map
中不存在,返回false
;若存在,通过hashMap.get(Object key)
得到该字符出现的次数,减一,更新hashmap
。最后看map
的value的视图集合中,值是否有不等于0的,若没有则是anagram。
代码实现:
public class Solution { public boolean isAnagram(String s, String t) { if(s.length() != t.length()) return false; Map< Character, Integer> sMap = new HashMap<Character, Integer>(); for(int i=0; i< s.length(); ++i) { if(sMap.containsKey(s.charAt(i))) { int tmp = sMap.get(s.charAt(i))+1; sMap.put(s.charAt(i), tmp); } else{ sMap.put(s.charAt(i), 1); } } for(int j =0 ; j<t.length(); ++j) { if(!sMap.containsKey(t.charAt(j))) return false; else{ int tmp = sMap.get(t.charAt(j))-1; sMap.put(t.charAt(j), tmp); } } Set<Character> keySet = sMap.keySet(); Iterator<Character> iter= keySet.iterator(); while(iter.hasNext()) { Character key = iter.next(); if(sMap.get(key)!=0) return false; } return true; }}
在网上看到另解:
因为变形词两个单词对应字母出现的次数都相同,所以如果将两个单词按字母顺序排序,肯定会变为一个字符串,如果字符串不相同,则不是变形词。
public class Solution { public boolean isAnagram(String s, String t) { char[] sArr=s.toCharArray(); char[] tArr=t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); return String.valueOf(sArr).equals(String.valueOf(tArr)); }}
- 【leetcode】Valid Anagram 【java】
- (java)leetcode Valid Anagram
- leetcode:Valid Anagram 【Java】
- LeetCode Valid Anagram JAVA
- Valid Anagram (java)
- 242. Valid Anagram(Java)
- LeetCode:242 Valid Anagram Java
- [leetcode-242]Valid Anagram(java)
- LeetCode 242 -Valid Anagram ( JAVA )
- leetcode-Java-242. Valid Anagram
- LeetCode-242. Valid Anagram (Java)
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- hdoj-5703-Desert
- linux中crontab用法
- 获取进程列表和模块信息
- android 学习笔记十二 监听键盘状态
- ios项目中安装和使用CocoaPods
- Valid Anagram (java)
- Ubuntu15 安装Pycharm
- 我的第一个Linux小程序(进度条)
- hdoj-5706-GirlCat
- Java集合接口
- iOS -- CALayer之锚点
- Keras学习笔记1——win7__keras框架搭建步骤(Theano)
- Linux命令-df、du
- CFRunLoop