力扣每日一题--- 有效的字母异位词 哈希表的使用1

题目描述

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

示例 1:

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

输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

字母异位:所有字符串中的字母相同,只是在不同的位置

解法1:

两个字符串排序后相等 —有效字符异位
否则,false;

class Solution {
    public boolean isAnagram(String s, String t) {
       //字符串转化成 char数组
        char[] str1 = s.toCharArray();
        char[] str2 = t.toCharArray();

        //排序
        Arrays.sort(str1);
        Arrays.sort(str2);

        return Arrays.equals(str1,str2);
            
    }
}

时间复杂度: O(nlogn)

解法2 -哈希表

  1. 字符串长度不同,肯定不是有效的字母异位,直接返回false;

  2. 构造哈希表hashtable(在这里使用数组)存储字符串中每个字符出现的频次;
    只包含小写字母a~z,数组大小–>26;
    遍历s中字符的频次并在哈希表中记录;
    遍历t中的字符,在哈希表中减去对应的频次

  3. 如果hashtable[i]<0,则表示t中所含的字符不全部在s中,直接返回false;

class Solution {
    public boolean isAnagram(String s, String t) {
       if(t.length() != s.length()){
           return false;
       }
       
       //哈希表
       int[] hashtable = new int[26];

      //将s中统计频次
      for(int i = 0; i < s.length(); i++){
          hashtable[s.charAt(i)-'a']++;
      }

      for(int j = 0; j < t.length(); j++){
          hashtable[t.charAt(j) - 'a']--;

          if(hashtable[t.charAt(j) - 'a'] < 0){
              return false;
          }

      }
      return true;
    }
}

时间复杂度:O(n) n为字符串s的长度;

String 字符串基础知识整理总结

link:字符串你需要掌握的基础知识

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页