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;

    }
}
相关推荐
扎瓦8 分钟前
ThreadLocal 线程变量
java·后端
BillKu26 分钟前
Java后端检查空条件查询
java·开发语言
jackson凌31 分钟前
【Java学习笔记】String类(重点)
java·笔记·学习
蒟蒻小袁37 分钟前
力扣面试150题--被围绕的区域
leetcode·面试·深度优先
刘白Live1 小时前
【Java】谈一谈浅克隆和深克隆
java
一线大码1 小时前
项目中怎么确定线程池的大小
java·后端
要加油哦~1 小时前
vue · 插槽 | $slots:访问所有命名插槽内容 | 插槽的使用:子组件和父组件如何书写?
java·前端·javascript
Q8137574601 小时前
中阳视角下的资产配置趋势分析与算法支持
算法
crud1 小时前
Spring Boot 3 整合 Swagger:打造现代化 API 文档系统(附完整代码 + 高级配置 + 最佳实践)
java·spring boot·swagger
天天摸鱼的java工程师1 小时前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql