剑指offer032---有效的变位词(简单难度)

简介: 剑指offer032---有效的变位词(简单难度)

目录

题目概述(简单难度)

题目链接

点我进入leetcode

思路与代码

思路展现

这道题目我们使用哈希

代码示例

class Solution {
    public boolean isAnagram(String s, String t) {
    if(s.length() != t.length() || s.equals(t)) {
        return false;
    }
     HashMap<Character,Integer> hash = new HashMap<>();
     for(char ch : s.toCharArray()) {
         //获取key所对应的value值,如果没有获得默认值,此处我们设置的默认值为0
         Integer count = hash.getOrDefault(ch , 0);
         hash.put(ch,count + 1);
     }
     for(char ch1 :t.toCharArray()) {
         //获取key所对应的value值,如果没有获得默认值,此处我们设置的默认值为0
         //但是注意此处如果s中的字符t中都有,那么此处count的值为0
         Integer count = hash.getOrDefault(ch1 , 0);
         //一旦在循环获取count的时候发现有一次为0,就说明不是变位词
         if(count == 0) {
           return false;
         }
         //遍历 t 中字符,对 s 中的字符进行抵消,如果不能抵消,则说明 t 不是变位词
         hash.put(ch1,count - 1);
     }
     //能走到这一步说明此时都抵消完毕了
     return true;
    }
}

2.png

代码解析


这道题目我认为比较巧妙的是运用了getOrDefault方法,因为这个方法首先运用在s字符串的时候是为了先给s这个字符串中的每个字符赋值给一个初始的value值,为0,方便后期对每个字符的计数


第二次使用我们的getOrDefault方法是在t中,因为之前我们已经统计了s中每个字符出现的次数,如果t中的每个字符都在s中出现过且次数相同,那么我们在t中使用getOrDefault方法的时候肯定不会获得0值,因为getOrDefault方法只有在key值也就是当前hash中没有某个字符的时候才会默认付给这个字符一个值为0的value,所以说有了我们后面的判断,当这个count为0的时候,直接返回false,说明t中一定有s中没有的字符,不符合题意.



相关文章
BUUCTF----飞机大战,解题思路
BUUCTF----飞机大战,解题思路
|
6月前
|
存储
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
34 0
|
7月前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
47 3
|
7月前
|
机器人
[leedcode]刷题有感--动态规划入门及思路模板
[leedcode]刷题有感--动态规划入门及思路模板
|
7月前
【每日一题Day208】LC1335工作计划的最低难度 | 动态规划
【每日一题Day208】LC1335工作计划的最低难度 | 动态规划
45 0
|
7月前
|
机器学习/深度学习 算法
六六力扣刷题双指针之三数之和
六六力扣刷题双指针之三数之和
60 0
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
|
数据安全/隐私保护 C++
C/C++之(五)洛谷刷题基础题 --- 新年好
C/C++之(五)洛谷刷题基础题 --- 新年好
601 0
C/C++之(五)洛谷刷题基础题 --- 新年好