242.有效字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true 示例 2:
输入: s = “rat”, t = “car” 输出: false
提示:
1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路
因为只含有小写字母,所以定义一个新的数组record,长度为26。
每个字母的ascii码中与字符’ a '的位置都是不同的,相同字母的ascii码与字符’a’的相对位置是相同的
先遍历s,并每次遍历时把s中的字母在record中相对应位置的数值加一
再遍历t,并每次遍历时把t中的字母在record中对应位置的数值减一
如果最后record数组全为0则 字符串s和t是异位词
charAt()方法: 接受一个整数参数作为索引,并返回该索引位置上的字符。索引从0开始,表示字符串中的第一个字符。例如,如果有一个字符串s =
“Hello”,可以使用charAt()方法获取特定索引位置上的字符。
for(int count : record){statemen} Java中的增强型for循环(也称为for-each循环)。它用于遍历一个名为record的整数数组中的每个元素,并将每个元素的值赋给循环变量count。在每次循环迭代时,count变量将依次取得record数组中的元素值,可以在循环体内使用count变量进行相应的操作。
class Solution {
public boolean isAnagram(String s, String t) {
//只有小写字母,可以只定义一个长度为26的数组
int[] record = new int[26];
for(int i= 0; i < s.length(); i++){
//charAt()方法接受一个整数参数作为索引,并返回该索引位置上的字符
//表达式s.charAt(i) - 'a'的结果是一个整数,表示字符在字母表中的相对位置
record[s.charAt(i) - 'a']++;
}
for(int i = 0; i < t.length(); i++){
record[t.charAt(i) - 'a']--;
}
//Java加强for循环,每次循环迭代时,
//count变量将依次取得record数组中的元素值
//可以在循环体内使用count变量进行相应的操作。
for(int count : record){
if(count!= 0) return false;
}
return true;
}
}