242. Valid Anagram
题目描述和难度
- 题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
- 题目难度:简单。
- 英文网址:242. Valid Anagram 。
- 中文网址:242. 有效的字母异位词 。
思路分析
求解关键:
参考解答
参考解答1:把两个字符串都转换成字符数组以后,进行排序,然后逐位进行比较。
public class Solution {
public boolean isAnagram(String s, String t) {
boolean isAnagram = true;
if (s.length() != t.length()) {
isAnagram = false;
} else {
char[] sArray = s.toCharArray();
Arrays.sort(sArray);
char[] tArray = t.toCharArray();
Arrays.sort(tArray);
for (int i = 0; i < sArray.length; i++) {
if (sArray[i] != tArray[i]) {
isAnagram = false;
break;
}
}
}
return isAnagram;
}
}
参考解答2:放入一个 Map 中,只要后面有一个元素不出现在 Map 中,就退出,最后应该使得这个 Map 里所有元素的 value 值都为 0。
public class Solution2 {
public boolean isAnagram(String s, String t) {
boolean isAnagram = true;
if (s.length() != t.length()) {
isAnagram = false;
} else {
char[] sArray = s.toCharArray();
Map<Character, Integer> map1 = new HashMap<>();
for (char c : sArray) {
if (map1.containsKey(c)) {
map1.put(c, map1.get(c) + 1);
} else {
map1.put(c, 1);
}
}
char[] tArray = t.toCharArray();
for (char c : tArray) {
if (map1.containsKey(c) && map1.get(c) >= 1) {
map1.put(c, map1.get(c) - 1);
} else {
isAnagram = false;
break;
}
}
}
return isAnagram;
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0242-valid-anagram ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。