给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true
输入: s = "rat", t = "car"
输出: false
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
方法一:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
Map<Character,Integer> map = new HashMap<>();
char[] sChars = s.toCharArray();
char[] tChars = t.toCharArray();
for (int i = 0; i < sChars.length; i++) {
if (map.containsKey(sChars[i])){
map.put(sChars[i],map.get(sChars[i])+1);
}else {
map.put(sChars[i],1);
}
}
for (int i = 0; i < tChars.length; i++) {
if (map.containsKey(tChars[i])){
if (map.get(tChars[i]) >1){
map.put(tChars[i],map.get(tChars[i])-1);
}else {
map.remove(tChars[i]);
}
}else {
return false;
}
}
return true;
}
}
方法二:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
char[] chars = s.toCharArray();
List<String> list = new ArrayList<>();
for (char c : t.toCharArray()) {
list.add(""+c+"");
}
for (int i = 0; i < chars.length; i++) {
list.remove(""+chars[i]+"");
}
if (list.size() == 0){
return true;
}else {
return false;
}
}
}
方法三:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
char[] sc = s.toCharArray();
char[] tc = t.toCharArray();
Arrays.sort(sc);
Arrays.sort(tc);
for (int i = 0; i < sc.length; i++) {
if (sc[i] != tc[i]){
return false;
}
}
return true;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram