242. 有效的字母异位词(leetcode每日打卡)

242. 有效的字母异位词

目录

题目描述

思路

题解


题目描述

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false

思路

从另一个角度考虑,t 是 s 的异位词等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26个小写字母,因此我们可以维护一个长度为 26的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]<0,则说明 t包含一个不在 s 中的额外字符,返回 false 即可。

题解

class Solution{

    public boolean isSucc(String s,String t){
//        char []ss=s.toCharArray();   
        char []tt=t.toCharArray();
        int[] arr=new int[26];
    for(int i=0;i<s.length();i++){arr[s.charAt(i)-'a']++;}
    for(int i=0;i<t.length();i++){arr[tt[i]-'a']--;}
    for(int i=0;i<arr.length;i++){if(arr[i]!=0){return false;}}
    
    return true;
    }

}

执行用时:3 ms, 在所有 Java 提交中击败了74.05%的用户

内存消耗:38 MB, 在所有 Java 提交中击败了98.48%的用户

通过测试用例:36 / 36

  • 时间复杂度:O(n),其中 n为 s的长度。

  • 空间复杂度:O(S),其中 S 为字符集大小,此处 S=26。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值