每日一题-字符串 leetcode242

222 阅读1分钟

一、题目描述

二、题目思路

  1. 方案一:首先想到哈希表,需要额外开辟空间
  2. 方案二:可以对字符数组进行排序,进行相等判断
  3. 对于进阶问题,哈希表是更好的解决办法, 可以存储大范围的字符

三、提交代码

  1. 方案一
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        HashMap<Character,Integer> hashMap = new HashMap<>();
        for(int i =0;i<s.length();i++){
            hashMap.put(s.charAt(i),hashMap.getOrDefault(s.charAt(i),0)+1);
            hashMap.put(t.charAt(i),hashMap.getOrDefault(t.charAt(i),0)-1);
        }
        for(int j:hashMap.values()){
            if(j !=0){
                return false;
            }
        }
        return true;
    }
}
  1. 方案二
class solution{
    public boolean isAnagram(String s,String t){
        if(s.length() != t.length()){
            return false;
        }
        char[] schars = s.toCharArray();
        char[] tchars = t.toCharArray();
        Arrays.sort(schars);
        Arrays.sort(tchars);
        return Arrays.equals(schars,tchars);
    }
}

四、存在的问题

  1. 方案一开辟了新的内存
  2. 方案二排序时调用了库函数,同时,StringtoCharArray()方法制作了一个字符串的拷贝,需要花费O(n)额外的空间
  3. Arrayssort()函数 equals()函数