重温算法之有效的字母异位词

简介: 题友的哈希映射法,不需要额外的空间,相比较我这个,使用了现成方法的,其实优秀很多,当然如果在实际的业务开发中,需要用到算法时,包装过的方法有时候是比较有优势的。

微信截图_20220531173728.png

一.题目介绍


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,则二者是字母异位词

微信截图_20220531200433.png


3.运行结果

微信截图_20220531200510.png

微信截图_20220531200541.png


三.题后思考


题友的哈希映射法,不需要额外的空间,相比较我这个,使用了现成方法的,其实优秀很多,当然如果在实际的业务开发中,需要用到算法时,包装过的方法有时候是比较有优势的。

目录
相关文章
|
算法 Java 索引
【洛谷算法题】P5704-字母转换【入门1顺序结构】
【洛谷算法题】P5704-字母转换【入门1顺序结构】
|
4月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
2月前
|
算法
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
32 1
|
5月前
|
自然语言处理 Rust 算法
【算法】17. 电话号码的字母组合(多语言实现)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
【算法】17. 电话号码的字母组合(多语言实现)
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
6月前
|
存储 算法 Java
【经典算法】LeetCode 1170:比较字符串最小字母出现频次(Java/C/Python3实现含注释说明,中等)
【经典算法】LeetCode 1170:比较字符串最小字母出现频次(Java/C/Python3实现含注释说明,中等)
38 0
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
75 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
|
7月前
|
算法 索引
算法编程(二十):仅仅反转字母
算法编程(二十):仅仅反转字母
46 0
|
人工智能 算法
代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间
代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间
69 0