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;

    }
}
相关推荐
xbgRS7 小时前
springboot的自动装配
java·spring boot
大明者省14 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
嘻哈∠※14 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_79815 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25816 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅16 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记16 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI16 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型17 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光17 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口