[LeetCode]--242. Valid Anagram

来源:互联网 发布:淘宝生意参谋情报竞争 编辑:程序博客网 时间:2024/05/16 08:17

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.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?

判断给定两个字符串是否为相同字母不同排列的单词。

最简单的办法就是调用stl的排序函数sort给两个字符串s和t排序,然后比较是否相等即可,复杂度为O(nlogn);

如果嫌弃复杂度太高,还可以采用另外一种办法求每个字符个数判相等(题目已经假设只有小写字母那么也就只有26个),比较是否相等,复杂度为O(n);

我想到用map记录,然后看map是否equals。

public boolean isAnagram(String s, String t) {        if (s.length() != t.length())            return false;        if (s.length() == 0 && t.length() == 0)            return true;        Map<Character, Integer> map = new HashMap<Character, Integer>();        Map<Character, Integer> map1 = new HashMap<Character, Integer>();        for (int i = 0; i < s.length(); i++) {            if (!map.containsKey(s.charAt(i)))                map.put(s.charAt(i), 1);            map.put(s.charAt(i), map.get(s.charAt(i)) + 1);        }        for (int i = 0; i < t.length(); i++) {            if (!map1.containsKey(t.charAt(i)))                map1.put(t.charAt(i), 1);            map1.put(t.charAt(i), map1.get(t.charAt(i)) + 1);        }        if (map.equals(map1))            return true;        return false;    }

另外一种,先排序之后比较两字符数组是否相等。

public boolean isAnagram(String s, String t) {        if (s.length() != t.length())            return false;        if (s.length() == 0 && t.length() == 0)            return true;        char[] ss = s.toCharArray();        char[] tt = t.toCharArray();        Arrays.sort(ss);        Arrays.sort(tt);        for (int i = 0; i < tt.length; i++) {            if (ss[i] != tt[i])                return false;        }        return true;    }
0 0
原创粉丝点击