一.题目介绍
1.题目来源
链接:LeetCode
2.题目
给定两个字符串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仅包含小写字母
二.具体实现
1.实现思路
首先抓住题目重点,如果s和t中每个字符出现的次数都相同,则称s和t互为字母异位词,第一想法是循环比较然后统计元素相同次数,但是这种做法属于暴力法,耗时长,时间复杂度太高,那针对数组有没有好的比较方法呢,Arrays.equals()就是现成的方法,而在此之前需要将字符串转成数组,然后分别对其进行排序,排序的目的成为从小到大的有序数组,比较时比较省时,接下来看看具体实现
2.实现代码
1)自己的实现方式
public boolean isAnagram(String s, String t) { //此处对空字符串做判断 if(s.length() != t.length()) { return false; }; //特殊情况判断:如果是内容相同的字符串,那肯定是互为字母异位词的 if(s.equals(t)) { return true; } //字符串转数组 char[] chs = s.toCharArray(); char[] cht = t.toCharArray(); //排序 Arrays.sort(chs); Arrays.sort(cht); //比较 return Arrays.equals(chs,cht); } 复制代码
2)题友的实现方式
思路:哈希映射法,首先判断两个字符串长度是否相等,不相等则直接返回false,若相等,则初始化 26 个字母哈希表,遍历字符串s和t,s负责在对应位置增加,t负责在对应位置减少,如果哈希表的值都为0,则二者是字母异位词
3.运行结果
三.题后思考
题友的哈希映射法,不需要额外的空间,相比较我这个,使用了现成方法的,其实优秀很多,当然如果在实际的业务开发中,需要用到算法时,包装过的方法有时候是比较有优势的。