【每日一道LeetCode】LeetCode242:有效的字母异位词

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


当遇到这道题目时,在学习到哈希法之前呢,很多coder都第一时间会想到运用两层嵌套for循环去暴力检索两个字符串,同时还要记录字符出现的次数。这样显然不是有效的方法。因此本次将运用到哈希法。

👍解题思路:由于数据较小,因此创建一个数组来充当哈希表。数组其实就是一个简单哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。而且本次题目涉及到的数据都是小写的英文字母,因此使用数组充当哈希表即可。

1.创建一个长度为26的数组。(英文字母一共有26个),以下数组长度已省略。

public boolean isAnagram(String s, String t) {
    int[] record=new int[26];  //定义一个长度为26的数组。
}

2.运用for循环把s字符串的元素与字母'a'进行相减,因为在ASCII码表中,26个英文字母都是按照顺序进行排列的,它们相减的值也是有序的,可以存储进入record数组中来记录字符出现的次数。

public boolean isAnagram(String s, String t) {
        int[] record=new int[26];
        for (int i = 0; i <=s.length(); i++) {
            record[s.charAt(i)-'a']++;  //记录字符出现的次数
        }
}

3.运用for循环把t字符串的元素与字母'a'进行相减,不过相反的是,t字符串与'a'相减的结果对应record数组的索引的值需要-1,因为最后判断这两个字符串是否为有效的字母异位词的凭据是该record数组中的元素是否都为0。若为0,则是有效的字母异位词,相反,则不是。

public boolean isAnagram(String s, String t) {
        int[] record=new int[26];  //定义一个长度为26的数组。
        for (int i = 0; i <=s.length(); i++) {
            record[s.charAt(i)-'a']++;  //记录字符出现的次数
        }
        for (int i = 0; i <=t.length(); i++) {
            record[t.charAt(i)-'a']--;  
        }
        
}

4.判断record数组中的元素是否为0。

public boolean isAnagram(String s, String t) {
        int[] record=new int[26];  //定义一个长度为26的数组。
        for (int i = 0; i <=s.length(); i++) {
            record[s.charAt(i)-'a']++;  //记录字符出现的次数
        }
        for (int i = 0; i <=t.length(); i++) {
            record[t.charAt(i)-'a']--;
        }
        for (int element : record) { //遍历record数组的元素
            if (element!=0){
                return false;
            }
        }
        return true;
    }
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值