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;

    }
}
相关推荐
陈平安Java and C1 小时前
MyBatisPlus
java
秋野酱1 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
Bunny02122 小时前
SpringMVC笔记
java·redis·笔记
feng_blog66882 小时前
【docker-1】快速入门docker
java·docker·eureka
枫叶落雨2224 小时前
04JavaWeb——Maven-SpringBootWeb入门
java·maven
m0_748232394 小时前
SpringMVC新版本踩坑[已解决]
java
XianxinMao4 小时前
RLHF技术应用探析:从安全任务到高阶能力提升
人工智能·python·算法
码农小灰4 小时前
Spring MVC中HandlerInterceptor和Filter的区别
java·spring·mvc
hefaxiang4 小时前
【C++】函数重载
开发语言·c++·算法
乔木剑衣5 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合