38-外观数列
几个几,向下计算,由于数据小,直接dfs就行
49-字母异位词分组
其实就是模拟分类,分类的操作,map和set可以胜任。难点就是如何模拟,比如如何开拓vector的大小。
151-翻转字符串里的单词
两次反转,第一次整体反转,第二次局部反转,只有注意空格什么时候加,以及最后删除多余空格就行。
165-比较版本号
对每一个字符都分为是不是‘ . ’,,如果是,那么每次判断的条件更新,再对不是的,只要注意把前导零去点,其他存进数组,最后一个个比较。
最长回文子串
看到回文,最先想到的就是DP,那么这题的思路其实就是从DP转到输出字符串,怎么转,就是记录端点值。最后把端点值里的字符拼接起来就行。
273-整数转换英文表示
字符串这一系列,都需要定义字符数组,然后弄清思路,理清情况,最后分类讨论,最后的括号记得处理一下。
任何一次输出都是有规律的,我找到的规律比较繁琐,这个看题解应该可以理解,我的代码只能自己懂。。
3-无重复字符的最长字串
滑动窗口。i记录左指针,j记录右指针,j不断向右,一旦重复,i也向右。
这题目有个bug,卡了我几小时,就是判断j < len - 1那,len不能是s.length(),不然会返回false,我真是服气了这道题。
166-分数到小数
题解很详细
131-分割回文串
树形分解,dfs中有个循环,用来分割。当你循环i的时候,如果这个是回文字符串,那么就dfs后面的字符串。如果不是,那i++,当你分割完前面的字符串时,后面的字符串都已经分割过了,就比如aba,先分割a,那么后面ba的所有情况都被讨论过了,因为我们如果把ba看作心字符串进行dfs,还是会对ba进行分割,先看b,b成功,则dfs(a),成功,再dfs(ba)。
227-基本计算器II
栈操作,开long long,加个#,方便字符串结尾,不然还要判断是不是i是否等于length-1。栈用来存储数字,用p来记录前一个运算符,加减乘除,加减不用担心顺序颠倒,所以加减时存进栈,乘除时,把栈顶元素拿出来,进行操作,再把结果存进栈。
30-串联所有单词的子串
这个思路还是很简单的,就是一个个字符往后找,但是找的途中怎么确保字符串是相等的,因为words乱序,所以,我们要像一个办法表示所有的组合方法,那就是map映射,key存单词,value存数量(一个单词可能出现几个),然后再开一个map存我们查找的子串中,是否有value个map[key]值,在查找中途,会有很多break条件,比如一旦发现截取的单词map1中没有,那么break,如果,有了,加进map2中,但是map2中的value值大于map1中的对应value值,也会break,如果查询途中坚持到了最后,那么肯定满足,返回i。
最后一题,我准备归结到字符串进阶专题。
这几天准备把字符串进阶处理了