算法——有效的字母异位词(leetcode242)

有效的字母异位词即使用一组字母的每个字母排列组合成新的字母组合新的字母组合的字母种类及个数要与原字母组合相同(官方解释:字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。)

题目给定两个字符串判断这两个字符串是否是有效的字母异位词,这道题也就是判断重新排列字母组合时字母的种类和个数是否改变与原字母组合不同,因为字母一共有26个a~z对应的ASCLL码也是连续的所以我们可以使用哈希表的这种数据结构来解决这种问题,首先定义一个数组下标作为索引数组长度为26,我们无需关注字母的具体的ASCLL码的值只需让字母的ASCLL码减去'a'的ASCLL码即可让数组下标表示a~z;接着将第一个字符串遍历将字符索引对应数组中的下标位置的值+1表示一个字符串字符的数量,然后遍历第二个字符串将字符索引对应数组中的下标位置值-1接着判断数组各个索引位置的值是否为0即可 如果是0则是有效的字母异位词反之(话有点啰嗦理解一下哈希表的数据结构特性结合题目解题即可)

class Solution {
    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']++;
        }
        for (int j = 0; j < t.length(); j++) {
            record[t.charAt(j) - 'a']--;
        }
        for(int a:record){
            if(a!=0)return false;
        }
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值