题目链接:242. 有效的字母异位词
接口链接:Java中Map的getOrDefault()方法
- 算法图
class Solution { //java 排序
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray(); // 必须手动转换为 字符数组!
char[] str2 = t.toCharArray();
// str1.sort(); 错误,sort是Array中的方法
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}
}
class Solution { //java 哈希
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) {
return false;
}
int[] arr = new int[26]; // 数组构建哈希 效率还是很高的
for(int i=0; i<s.length(); ++i) {
arr[s.charAt(i) - 'a']++;
}
for(int i=0; i<t.length(); ++i) {
arr[t.charAt(i) - 'a']--;
if(arr[t.charAt(i) - 'a'] < 0) {
return false;
}
}
return true;
}
}
// 执行用时:3 ms, 在所有 Java 提交中击败了58.82%的用户
// 内存消耗:41.3 MB, 在所有 Java 提交中击败了66.70%的用户
class Solution { //java HashMap
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) {
return false;
}
Map<Character, Integer> map = new HashMap<>(); //超类 子类 多态
for(int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
for(char c : t.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) - 1); //还是map.put()
if(map.get(c) < 0) {
return false;
}
}
return true;
}
} //HashMap效率是真低!
//执行用时:14 ms, 在所有 Java 提交中击败了19.46%的用户
//内存消耗:42.2 MB, 在所有 Java 提交中击败了6.59%的用户
class Solution {
public: //cpp
bool isAnagram(string s, string t) {
vector<int> record(26,0);
for(auto& ch:s) ++record[ch-'a'];
for(auto& ch:t) --record[ch-'a'];
for(int& a:record){
if(a!=0) return false;
}
return true;
}
};
class Solution {
public: //cpp
bool isAnagram(string s, string t) {
sort(s.begin(),s.end());
sort(t.begin(),t.end());
return s==t;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)