LeetCode-探索-初级算法-字符串-4. 有效的字母异位词(个人做题记录,不是习题讲解)

50 篇文章 0 订阅
50 篇文章 0 订阅
LeetCode-探索-初级算法-字符串-4. 有效的字母异位词(个人做题记录,不是习题讲解)

LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/

  1. 有效的字母异位词
  • 语言:java

  • 思路:一开始想直接用异或运算,发现不行,如果是aa和bb,异或判断不了。后面就老实先判断长度是否相等,再用2个数组存储字母出现频率来比较

  • 代码(4ms):

    class Solution {
        public boolean isAnagram(String s, String t) {
            int len1 = s.length();
            int len2 = t.length();
            int[] arr1 = new int[26];
            int[] arr2 = new int[26];
            if(len1!=len2)
                return false;
            else{
                for(int i = 0; i < len1; ++i){
                    arr1[s.charAt(i)-97]+=1;
                    arr2[t.charAt(i)-97]+=1;
                }
                for(int i = 0; i < 26; ++i){
                    if(arr1[i]!=arr2[i])
                        return false;
                }
            }
            return true;
        }
    }
    
  • 参考代码(1ms):其实思路是一样的,不过他用空间换时间,减少了char和int的转换。

    class Solution {
        public boolean isAnagram(String s, String t) {
            char[] charArr1 = s.toCharArray();    
    		char[] charArr2 = t.toCharArray();    
    		char[] charCount = new char[256];
    		for (int i = 0; i < charArr1.length; i++) {
    			charCount[charArr1[i]]++;
    		}
    		for (int i = 0; i < charArr2.length; i++) {
    			charCount[charArr2[i]+26]++;
    		}
    		for (int i = 97; i < 97+26; i++) {
    			if(charCount[i] != charCount[i+26])
    				return false;
    		}
    		return true;
        }
    }
    
  • 参考后重写(2ms):估计是因为减法比较耗时(后面试了下,改用2数组都是加法,也是耗时,这应该涉及优化问题了,先不追究了)

    class Solution {
        public boolean isAnagram(String s, String t) {
            char[] sc = s.toCharArray();
            char[] tc = t.toCharArray();
            char[] arr = new char[256];
            int len1 = sc.length;
            int len2 = tc.length;
            if(len1!=len2){
                return false;
            }
            for(int i = 0; i < len1; ++i){
                arr[sc[i]]+=1;
                arr[tc[i]]-=1;
            }
            for(int i = 97; i <= 123; ++i){
                if(arr[i]!=0)
                    return false;
            }
            return true;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值