2. 有效的字母异位词
题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
我的代码
public static boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
boolean Boolean = true;
int[] a = new int[26];
int[] b = new int[26];
for(int i = 0;i < s.length();i ++){
a[s.charAt(i) - 'a'] ++;
b[t.charAt(i) - 'a'] ++;
}
for (int j = 0 ;j < 26; j ++)
{
if (a[j] == b[j])
continue;
else
Boolean = false;
}
return Boolean;
}
我的理解
这个题呢,暴力解题,哈哈!首先判断两个字符串是否相等,不相等直接返回错误。创建2个int数组,分别统计s和t中每个字母出现的次数。再逐个比较,如果有不相同的,false。否则就输出TRUE。运行竟然5ms,真快!
大佬的代码
public boolean isAnagram(String s, String t) {
int[] cnt = new int[26];
for (char c: s.toCharArray()){
cnt[c - 'a']++;
}
for (char c: t.toCharArray()){
cnt[c - 'a']--;
}
for (int i : cnt){
if (i != 0)
return false;
}
return true;
}
我对大佬代码的理解
创建一个int数组。for出字符串s每一个元素,给数组对应位置加一。然后for出字符串t每一个元素,给数组对应位置减一。最后判断数组中的每个元素是不是0。如果不是那么就false。
我觉得可以这样写:
for(int i = 0;i < s.length();i ++){
a[s.charAt(i) - 'a'] ++;
a[t.charAt(i) - 'a'] --;
}
for(int i : a){
if(i != 0)
return false;
}