Leetcode 242 有效的字母异位词(字符串转字符串数组+排序 & 哈希表)

Leetcode 242 有效的字母异位词(哈希表)

    • [解法1. 转为字符串数组-排序-比较](#解法1. 转为字符串数组-排序-比较)
    • 解法2

解法1. 转为字符串数组-排序-比较

采用排序的方法,先把字符串转化为字符数组,之后进行字符数组排序,之后比较两个字符数组是否相同

字符串长度:s.length()

字符串转为字符串数组:char a[] = s.toCharArray()

排序字符串数组(升序):Arrays.sort(a)

比较两个字符串数组是否一样:Arrays.euqals(a, b)

时间复杂度:O(nlog⁡n),其中 n 为 s 的长度。排序的时间复杂度为O(nlogn),比较两个字符串是否相等时间复杂度为 O(n),因此总体时间复杂度为 O(nlog⁡n+n)=O(nlogn)。

空间复杂度:O(log⁡n) 。排序需要 O(log⁡n) 的空间复杂度。注意,在 Java 中字符串是不可变的,因此我们需要额外的 O(n) 的空间来拷贝字符串。但是我们忽略这一复杂度分析,因为:

这依赖于语言的细节;

这取决于函数的设计方式,例如,可以将函数参数类型更改为 char[]

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        // 采用排序的方法,先把字符串转化为字符数组,之后进行字符数组排序,之后比较两个字符数组是否相同

        // 如果两个字符串长度不同,则直接返回false
        if(s.length() != t.length()) return false;

        // 把字符串转化为字符数组
        char a[] = s.toCharArray();
        char b[] = t.toCharArray();

        // 排序字符数组
        Arrays.sort(a);
        Arrays.sort(b);

        // 比较两个字符数组是否相同
        return Arrays.equals(a,b);

    }
}  

解法2

对于数组 来说,使用 length 属性
对于字符串 来说,使用 length() 方法

字符串长度:s.length()

数组的长度:arr.length

取出字符串中的字符:s.charAt(index)

定义一个数组作为hashmap保存26个小写字母,

遍历字符串s,取出每一个字符来,然后再对应数组的位置上++

遍历字符串t,取出每一个字符来,然后再对应数组的位置上--

遍历数组letter,如果里面不都为0,那么返回false,全为0则返回true

时间复杂度O(N)

空间复杂度O(N)

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        // 定义一个数组作为hashmap保存26个小写字母
        int[] letter = new int[26];

        // 遍历字符串s,取出每一个字符来,然后再对应数组的位置上++
        for(int i = 0; i < s.length(); i++){
            letter[s.charAt(i) - 'a']++;
        }

        // 遍历字符串t,取出每一个字符来,然后再对应数组的位置上--
        for(int i = 0; i < t.length(); i++){
            letter[t.charAt(i) - 'a']--;
        }

        // 遍历数组letter,如果里面不都为0,那么返回false,全为0则返回true
        for(int i = 0; i < letter.length; i++){
            if(letter[i] != 0) return false;
        }
        return true;

    }
}
相关推荐
Javatutouhouduan6 分钟前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
wniuniu_17 分钟前
socc19 echash部分代码讲解 二 hashtable
算法·哈希算法
小雅痞26 分钟前
[Java][Leetcode middle] 12. 整数转罗马数字
java·linux·leetcode
Espresso Macchiato29 分钟前
Leetcode 3551. Minimum Swaps to Sort by Digit Sum
leetcode·排序·leetcode medium·leetcode 3551·leetcode周赛450
多多*34 分钟前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
ai.Neo1 小时前
牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
数据结构·c++·算法
悄悄地努力1 小时前
IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
java·spring boot·intellij-idea
じ☆ve 清风°1 小时前
滑动窗口算法详解与C++实现
开发语言·c++·算法
东莞呵呵2 小时前
吴恩达机器学习(1)——机器学习算法分类
算法·机器学习·分类
救救孩子把2 小时前
Mac 环境下 JDK 版本切换全指南
java·开发语言·macos