leetcode刷题-242有效的字母异位词

121 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode242-有效的字母异位词

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

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

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

示例 1:

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

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

解题思路分析

解法1

本解法主要是利用char字符与数字之间的关系,将char字符转为对应的数字。通过将源数组数据放入暂存数组中进行记录。然后对目标数组进行遍历,如果找到对应的字符,则变更数组对应位置的值。数组的索引其实就是字母经过处理后对应的数字。如果找不到需要的字符,则认为异位词是无效的。反之,如果进行操作后能够实现题目的要求,则认为是有效的异位词。注意,最开始要进行以下判断,保证二者长度一致,如果不一致那么肯定不是异位词。 代码如下:

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length()){
        return false;
    }
    int[] count = new int[26];
    for (int i = 0; i < s.length(); i++) {
        count[s.charAt(i) - 'a']++;
    }

    for (int i = 0; i < t.length(); i++) {
        if(count[t.charAt(i) - 'a'] == 0){
            return false;
        }else{
            count[t.charAt(i) - 'a']--;
        }
    }
    return true;
}

解法2

本解法主要是将字符转为数组后,对数组进行排序操作处理。排序后对两个数组进行比较,如果相等则满足题目要求,依次将空间复杂度优化为o(1) 代码如下:

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length()){
        return false;
    }
    char[] ss = s.toCharArray();
    char[] tt = t.toCharArray();
    Arrays.sort(ss);
    Arrays.sort(tt);
    return Arrays.equals(ss,tt);
}

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(n) o(1)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。