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;

    }
}
相关推荐
一嘴一个橘子6 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora23 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio23 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
mit6.82429 分钟前
几何|阻碍链
算法
有一个好名字31 分钟前
力扣-小行星碰撞
算法·leetcode·职场和发展
MM_MS31 分钟前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
小璐猪头35 分钟前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
lamentropetion39 分钟前
E - Equal Tree Sums CF1656E
算法
代码游侠41 分钟前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty