今天刷有效的字母异位词,大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
方法:
- 直接转成字符数组排序,并比较
- 利用哈希表或者使用哈希映射法
审题目+事例+提示:
·比较的是s与t的每个字母出现字数
思路(哈希映射):
- 判断字符串s与t是否相等,不等直接false
- 相等则,创建大小26的数组(相当于哈希表),遍历字符串s与t
- s负责对应位置增加,t负责对应位置减少
- 若哈希表对应元素值都为0,则为字母异词
代码:
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
int[] alpha = new int[26];
for(int i = 0; i< s.length(); i++) {
alpha[s.charAt(i) - 'a'] ++;
alpha[t.charAt(i) - 'a'] --;
}
for(int i=0;i<26;i++)
if(alpha[i] != 0)
return false;
return true;
}
}
优化:
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) return false;
int[] arr = new int[26];
for(char c : s.toCharArray())
++arr[c - 'a'];
for(char c : t.toCharArray()){
--arr[c - 'a'];
if(arr[c - 'a'] < 0) return false;
}
return true;
}
代码(排序):
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray();
char[] str2 = t.toCharArray();
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}
}
注:使用了toCharArray(),Array.sort(),Array.equal()方法