前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
什么是字母异位词?
字符串A=ABDC
字符串B=ABCD
两个字符串中的字符一样次序不一样,它们两个就可以称为字母异位词但像上面这种情况我们就可以说B是A的字母异位词,如果两个字符串相同
的话那么我们就说它是互为字母异位词
暴力解法
- 如果两个字符串长度不一样,直接返回false
- A遍历出自己字符,记录字母出现的次数
- B嵌套在A循环里,遍历自己的字符,记录字母出现的次数
- 最后比较字母出现的次数是否一样,是否有不一样的字母
聪明的解法(哈希)
这其实可以理解为是一道匹配题对吧,匹配用什么呢?当然是哈希啦!
- 初始化一个数组,长度为26,用来记录所有字母可能出现的情况
- 遍历A,将字符串记录在数组中,每有一个字母这个位置就+1
- 遍历B,每有一个字符从数组中对应位置-1
- 如果哈希表的值都为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呗,这不就和数组的索引下标对上了吗?哈哈哈真的秒!!!