242. Valid Anagram
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Constraints:
- 1 <= s.length, t.length <= 5 * 104
- s and t consist of lowercase English letters.
思路
- 无脑:比较一个字符串中每一个字符是否是另外一个字符串永远的,没有就返回
- 想一想:本质上就是看两个字符串所组成的字符个数是否相等,如果相等那无论怎么重排序都能满足条件 (出现次数 -> HahMap)
- Tricky:
题解
- 无脑
if (s.length() != t.length())
return false;
// 把其中字符串转成List,
List<String> data = new ArrayList(Arrays.asList(s.split("")));
// O(n)
for (char val : t.toCharArray()) {
// 集合中 String 不能直接和 Char 做比较,先转成String
String cur = String.valueOf(val);
// O(n) 所以总的就是O(n^2) 三种里面时间复杂度最高
if (!data.contains(cur))
return false;
data.remove(cur);
}
return data.isEmpty();
- 想一想
public boolean isAnagram(String s, String t) {
// 如果长度不等肯定不满足条件,直接返回
if (s.length() != t.length())
return false;
HashMap<Character, Integer> sMap = new HashMap<>();
HashMap<Character, Integer> tMap = new HashMap<>();
char[] sChar = s.toCharArray();
char[] tChar = t.toCharArray();
// 因为做了长度判断,所以长度一定是相等的,那一次for就够了,统计两个字符串中每个字符出现的次数
// O(n)
for (int i = 0; i < sChar.length; i++) {
sMap.put(sChar[i], sMap.getOrDefault(sChar[i], 0) + 1);
tMap.put(tChar[i], tMap.getOrDefault(tChar[i], 0) + 1);
}
// 这里用的是包装类,已经重写过equals和hashcode了,如果是自定义类别忘了重写!
return sMap.equals(tMap);
}
}
标签:tMap,return,String,length,Valid,Easy,Anagram,HashMap
From: https://www.cnblogs.com/tanhaoo/p/17036789.html