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中,则删除改映射。实现上有问题,hashMapcontainsValue(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));    }}
0 0
原创粉丝点击