有效得到字母异位词 Posted on 2021-07-18 00:00:00 2021-07-18 00:00:00 by Author 摘要 给定两个字符串,你能判断这两个字符串是不是异位词尼????? # 有效得到字母异位词 > 写于2021/05/24 1. 题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(所有字母都是小数) 2. 示例描述: - 示例一: - 输入:s = "anagram",t = "nagaram" - 输出:true - 解释:t字符串中所有字符都是由s字符串打乱排序而来的。 - 示例二: - 输入:s = "rat",t = ”car“ - 输出:false - 解释:t字符串中没有出现s字符串中的`t`字符,并且多出现了`c`字符 3. 解题思路:这道题使用了桶原理,什么是桶原理,可以看看数据结构排序章节中的桶排序,就能清晰了解什么是桶原理了,这里不做多的解释。 首先判断t是否是s的异位词,我们知道异位词,就是t中所有字符是经过s字符打乱得来的。那么t中每个字符的个数与s字符串中每个字符的个数相同,那么我们就可以记录s字符串中每个字符的个数,然后在计算t字符每个字符的个数与s字符串每个字符个数的差,如果每个字符个数的差都为0,那么t就是s的异位词,否则就不是。具体实现细节如下代码所示。 4. 代码实现: ```java public boolean isAnagram(String s, String t) { //标志位,看是否t是s的异位词 boolean flag = true; //如果字符串s的长度与t字符串的长度不一样,那肯定不是异位词 if (s.length() != t.length()) { return false; } //定义一个桶数组,长度为26,为什么要定义一个26位的桶数组尼, //因为英文字母最多26位 int bucket[] = new int[26]; char[] sTemp = s.toCharArray(); //分别计算s字符串中每个字符的个数 for (int i = 0; i < s.length(); i++) { bucket[sTemp[i] - 'a']++; } //同时看t字符串每个字母的个数与s字符串个数的差 sTemp = t.toCharArray(); for (int i = 0; i < t.length(); i++) { bucket[sTemp[i] - 'a']--; } //如果桶中每个字符的个数都为0,说明t是s的异位词 //出现一个或者多个不为0的字符,都不算异味词 for (int i = 0; i < bucket.length; i++) { if (bucket[i] != 0) { flag = false; break; } } //返回结果 if (flag) { return true; } else { return false; } } ```
{{ item.content }}
{{ child.content }}