字符串刷题经历
2020.05.02
- leetcode3 无重复最长子串
- 解题思路:利用滑动窗口,定义两个指针start和end组成窗口,定义一个Map集合来储存数组中的元素及其下标。起始时两指针同时指向字符串第一个元素,end指针开始进行遍历,每遍历一个元素,将元素和下标以key-value的形式存放在Map中,更新结果集,移动end指针。当遍历到相同元素时,移动start指针至上次出现的次元素的下标值加一的位置,并更新Map集合中该元素的value值,更新结果集。当end指针到达终点,遍历结束,得到结果。
- 注意点:当end下标遍历到的元素上次出现的位置再start下标之前时,不能移动start下标,比如"abba"。
- leetcode5 最长回文子串
- 解题思路:利用中心扩散,对于每一个元素,都分为以下两种情况进行扩散:① 该元素为回文子串中心 ② 该元素和下一个元素都为回文子串中心。把每个元素的最大的回文子串都找到。遍历结束即得到结果。
- leetcode415 字符串相加
- 解题思路:利用双指针,两个指针分别定位在两个字符串的尾部,一个进位位保存进位结果,从后向前逐一求和即可。
- leetcode93 复原IP地址
- 解题思路:回溯法,穷举出所有的情况,选出符合条件的。
2020.05.03
- leetcode394 字符串解码
- 解题思路:利用栈,定义两个栈,分别是数字栈
stack_nums
来统计重复次数和字母栈stack_str
来统计当前的[
到上一个[
间的字符串。从前到后遍历整个字符串,如果是普通英文字符存入res中;如果是数字字符,记录数字大小;如果是[
,将当前的res字符串和记录的数字入栈,并清空字符串;如果是]
,首先对stack_nums
进行出栈操作,对当前的res内字符串循环拼接,同时stack_str
出栈与拼接后的字符串进行组合。 - 思路解析:
① 有几个数字,就会有几对[]
② 明确来说,res中存放的字符串才是碰到]
时,需要进行重复的;stack_str
中的字符则是出现]
时,在res中字符拼接结束后加在其前面的字符。 - leetcode43 字符相乘
- 解题思路:利用小学数学乘法的思路,将num1每一位数与num2相乘一次,每次的乘积要与其所在位置的权重相乘,然后做和即可。
- leetcode8 字符串转整数
- 解题思路:这个题就是纯体力活,按照题目的要求一条一条实现就行,当然我是看了高票的答案解析,自己容易写懵圈。