有效字母异位词力扣--242

目录

题目

思路

代码


题目

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词

示例 1:

复制代码
输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

复制代码
输入: s = "rat", t = "car"
输出: false

思路

1.什么是异位词?

两个字符串中除了字母的顺序不一样以外,组成字符串的字母都一样。

2.怎么想到要使用哈希表?

相当于查找一个字母是否在集合中,自然想到哈希表。

3.暴力解法可否解出来?

用两个for循环,可以暴力解出来,时间复杂度是O(n^2)

4.用哈希表的思路

  • 关键是构造哈希函数,想到用一个数组存每个字母出现的次数,将出现的字母种类称作a,哈希表的长度称作b a不能大于b,特殊之处在于,是字母,且两个字符串都是小写的,a-z的ASCII码差为26,所以创建一个长度为26的就可以。
  • 先遍历一个字符串S,通过某种方式,找到存他的位置,出现一次位置上就+1,通过这种方法来得到他出现几次
  • 通过的方式:长度为26,所以数组必然是从0-25,只需要用得到的字母的ASCII码减去a的,就可以得到唯一确定的存储位置。
  • 接着遍历另一个字符串T,通过同样的方式找到唯一存储的位置索引,然后-1
  • 最后只需要遍历哈希表,如果所有元素都为0,那么返回true,否则不行(如果大于0,说明某个字母在S中出现比在T中多出现一次,如果小于0说明某个字母在T中比在S中多出现一次)

代码

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        int[] c=new int[26];//创建长度为26的哈希表,让每个字母出现的次数都有唯一且确定的位置存放
        for(int i=0;i<s.length();i++){//遍历其中一个字符串
            c[s.charAt(i)-'a']++;//找到存放的位置,出现次数+1
        }
        for(int j=0;j<t.length();j++){//遍历另一个元素
            c[t.charAt(j)-'a']--;

        }
        for(int result:c){//遍历哈希表
            if(result!=0){
                return false;//不是
            }
           
        }  
         return true;//是
    } 
}
java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length())//长度不一样,必然不是
            return false;
        int[] alpha = new int[26];
        for(int i = 0; i< s.length(); i++) {//有了上述判断只需要遍历一个字符串就可以了
            alpha[s.charAt(i) - 'a'] ++;
            alpha[t.charAt(i) - 'a'] --;
        }
        for(int i=0;i<26;i++)
            if(alpha[i] != 0)
                return false;
        return true;
    }
}
相关推荐
_Evan_Yao7 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd7 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼7 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
thefool1122668 小时前
TCP 1
java·1024程序员节
paopaokaka_luck10 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
金銀銅鐵10 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
?abc!11 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
AI人工智能+电脑小能手11 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck12 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_322414280413 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis