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;
}
时间: 2024-10-26 05:20:20