问题:
package com.example.demo; import java.util.Arrays; public class Test242 { /** * 判断是否是异位词 * 分析: (问题提示:都是小写字母的情况) * 利用桶站位,假如是异位词,则这两个字符串的长度相等,则遍历字符串,将第一个字符串中存在的字符时,在桶中+1, * 在第二个存在的字符,则桶中-1,当遍历完成之后,遍历数组,是否所有的位置都是0,如果都是0,则是异位,不都是0,则不是异位 */ public boolean isAnagram(String s, String t) { int len1 = s.length(); int len2 = t.length(); if (len1 != len2) { return false; } int cur = 0; int[] bucket = new int[26]; while (cur < len1) { // 都是小写字母的情况 int index1 = s.charAt(cur) - 'a'; bucket[index1]++; int index2 = t.charAt(cur) - 'a'; bucket[index2]--; cur++; } for (int i : bucket) { if (i != 0) { return false; } } return true; } /** * 方法二:利用排序和比较字符串 */ public boolean isAnagram1(String s, String t) { if (s.length() != t.length()) { return false; } char[] chars = s.toCharArray(); char[] chars1 = t.toCharArray(); Arrays.sort(chars); Arrays.sort(chars1); return Arrays.equals(chars, chars1); } public static void main(String[] args) { Test242 t = new Test242(); boolean anagram = t.isAnagram1("asdf", "fdas"); System.out.println(anagram); } }