遍历第一个字符串,将遍历到的字符的对应位置上+1,如遇到 a 字符,则 arr[0]++,遇到 b 字符,则arr[1]++…
遍历第二个字符串,相反的,将遍历到的字符的对应位置上-1,如遇到 a 字符,则 arr[0]–,遇到 b 字符,则arr[1] - - …
最后遍历一次记录字母次数的数组 arr ,如果 arr 中各个位置的值都为0,则证明第二个字符串 t 是第一个字符串 s 的字母异位词。
代码:
publicbooleanisAnagram(String s, String t){int[] arr =newint[26];int SLength = s.length();int TLength = t.length();for(int i =0; i < SLength; i++){//解决找到字符对应数组的位置的问题 // a - a = 0// b - a = 1// c - a = 2// ......
arr[s.charAt(i)-'a']++;}for(int i =0; i < TLength; i++){
arr[t.charAt(i)-'a']--;}for(int i =0; i < arr.length; i++){if(arr[i]!=0){returnfalse;}}returntrue;}
题目:题意理解:异位词:长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同,即称异位词。说明中说假设字符中只含小学字母:不用考虑字母的大小写问题和其他字符。解题思路:因为只含小写字母,而小写字母只有26个,所以可以创建一个长度为26的数组,通过遍历字符串来记录遇到的字母次数。遍历第一个字符串,将遍历到的字符的对应位置上+1,如遇到 a 字符,则 arr[0]++,遇到 b 字符,则arr[1]++…遍历第二个字符串,相反的,将遍历到的字符的对应位置上-1,如遇到 a 字符