LeetCode每日1题--有效的字母异位词

简介: LeetCode每日1题--有效的字母异位词

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral

题目


解析


image.png

什么是字母异位词?

字符串A=ABDC

字符串B=ABCD

两个字符串中的字符一样次序不一样,它们两个就可以称为字母异位词但像上面这种情况我们就可以说B是A的字母异位词,如果两个字符串相同的话那么我们就说它是互为字母异位词

暴力解法

  1. 如果两个字符串长度不一样,直接返回false
  2. A遍历出自己字符,记录字母出现的次数
  3. B嵌套在A循环里,遍历自己的字符,记录字母出现的次数
  4. 最后比较字母出现的次数是否一样,是否有不一样的字母

聪明的解法(哈希)

这其实可以理解为是一道匹配题对吧,匹配用什么呢?当然是哈希啦!

  1. 初始化一个数组,长度为26,用来记录所有字母可能出现的情况
  2. 遍历A,将字符串记录在数组中,每有一个字母这个位置就+1
  3. 遍历B,每有一个字符从数组中对应位置-1
  4. 如果哈希表的值都为0,则二者就是字母异位词


class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] table = new int[26];
        for (int i = 0; i < s.length(); i++) {
            table[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            table[t.charAt(i) - 'a']--;
            if (table[t.charAt(i) - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}

为什么要减去'a'

A的ASCII码是65,字符a到字符z的ACCII是连续的数值,所以字符a - a那么对应的数字就是0,b字符呢?66-65呗,这不就和数组的索引下标对上了吗?哈哈哈真的秒!!!



相关文章
|
2天前
|
算法 测试技术 C#
【单调栈】LeetCode2030:含特定字母的最小子序列
【单调栈】LeetCode2030:含特定字母的最小子序列
|
2天前
leetcode代码记录(第一个出现两次的字母
leetcode代码记录(第一个出现两次的字母
11 2
|
2天前
leetcode代码记录(有效的字母异位词
leetcode代码记录(有效的字母异位词
10 1
|
2天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
2天前
【力扣】1832.判断句子是否为全字母句
【力扣】1832.判断句子是否为全字母句
|
2天前
leetcode热题100. 字母异位词分组
leetcode热题100. 字母异位词分组
18 0
|
2天前
|
Java
LeetCode-电话号码的字母组合-Java
电话号码的字母组合-Java
15 0
|
2天前
|
算法
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
29 0
|
2天前
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
32 0
|
2天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0