String问题

切记修改完立刻更新
字符串问题

214. Shortest Palindrome

要求:给定字符串,输出从左边增加的最短的字符串长度
思路:kmp算法
错误:kmp不会写,忘记字符串与自身比较长度的思路,给next赋0值时,忘记更新
ac:kmp

10. Regular Expression Matching

要求:正则表达式问题
思路:动态规划问题
错误:初始化出现问题, charAt(k) 按照规则,如果当前第k位置为*,那么看k - 1位
ac:dp

44. Wildcard Matching

要求:通配符

30. Substring with Concatenation of All Words

要求:给定字符串,给定数组,得到包含数组中所有元素的合理起始位置
思路:1,双指针 加map (超时),
2.map + 滑动窗口,不适合现场写程序

76. Minimum Window Substring

要求: s与t,求s中包含t的最小窗口长度
思路:这个是利用滑动窗口,双map的问题, 很不错的一道题目, -1, +1,利用count的值进行判定
错误:每次put值都出现问题,注意长度的更新问题
ac:两个窗口的问题

32. Longest Valid Parentheses

要求:最长的字符串(括号)匹配长度
思路: 这个可以采用stack来进行,但是stack放入的是下标的值,dp:dp[i] ,以i结尾最长匹配,方程
i为 ( dp[i] = dp[i - 1]; i 为 )判断前一个以及 int c = (i-dp[i-1]-2 >= 0) ? dp[i-dp[i-1]-2] : 0; dp[i] = dp[i - 1] + 2 + c ;
ac:stack容易理解一些,从下标出发

20. Valid Parentheses

要求:几种不同的正反括号,判断是否是有效的,
思路:这个利用数组来做,也可以用stack来做,stack方便点

336. Palindrome Pairs

要求:找出数组里面所有的回文字符串对
思路:无思路
错误:在对第二个字符串判断的时候,要加上长度是否为0
ac:利用map进行字符串以index的映射,对单个字符串进行左右拆分,左右分别判断是否回文,回文的话,对另外的一部分进行反转,然后在map里面寻找,是否有相同的,有就添加到结果里面,没有就继续。

273. Integer to English Words

要求:数数
ac:先数3位数, 在加上单位。 数3位数的时候,需要对数值进行判断,0, 小于20, 小于100, 其他,递归求解

127. Word Ladder

要求:给定一个字符串数组,得到最小的单词变换次数
思路: bfs,其中注意两点,1.查找临近单词的时候,注意使用修改a到z字母的方法,处理完在修改过来, 2
利用set存储访问过的路径,bfs尤其注意queue。size()

126. Word Ladder II

要求:输出最小的变换距离
思路:无思路
ac:先利用bfs记录下邻居,记录下距离,按照距离进行变流

65. Valid Number

要求:判断一个数是不是有效的数
思路:设置4个标志位
If we see [0-9] we reset the number flags.
We can only see . if we didn’t see e or ..
We can only see e if we didn’t see e but we did see a number. We reset numberAfterE flag.
We can only see + and - in the beginning and after an e
any other character break the validation.

115. Distinct Subsequences

要求:给定两个字符串s和t,输出用s组成t可以有多少种情况
思路:用动态规划处理
dp:t在前,j在后,当他们不相等的时候,j只能扔掉,当他们相等的时候,扔掉或者不扔的和
If t[i - 1] != s[j - 1], the distinct subsequences will not include s[j - 1] and thus all the number of distinct subsequences will simply be those in s[0..j - 2], which corresponds to dp[i][j - 1];
If t[i - 1] == s[j - 1], the number of distinct subsequences include two parts: those with s[j - 1] and those without;
An empty string will have exactly one subsequence in any string :-)
Non-empty string will have no subsequences in an empty string.
ac:思路很重要

97. Interleaving String

要求:给定两个字符串,以及目标字符串,判断在不改变相对顺序的情况下,能否组成字符串3
思路:1.dfs + dp缓存 2.单纯的dp来做
ac:dfs反而更快一点

87. Scramble String

要求:给定两个字符串,判断另外一个能否由部分交换完成
思路:1.进行递归, 2.动态规划,用的是i,j,k,p四个参数
ac:可以递归解,这里面用递归解思路比较清晰,先判断是否相等,然后判断字符是否相等,然后调用递归

72. Edit Distance

要求:给定两个字符串,判断最小修改大小
思路:dp
ac:注意方程初始化问题

68. Text Justification

要求:对每一行输出给定长度的字符串,把一个文本编程一个字符串链表,每个字符串长度相等
思路:用分支法,

553. Optimal Division

要求:很有意思的一个题目,连续除法加括号
思路:大于2,直接在第一个跟第二个位置之间加括号,然后在末尾加括号

5. Longest Palindromic Substring

要求:输出最长的回文子串
思路:1.从字符串的每一个字符开始,进行遍历,分奇数偶数进行操作
2.dp;如果i j相等 dp[i + 1][j - 1],更新
错误:i更新出现问题

224. Basic Calculator

要求:实现基础计算器,需要加上括号的,这个就是来了num就直接计算的
思路:利用stack,每当出现括号的时候,就保存下当前的sign跟当前的resu,然后遇到反括号后,每当遇到数字,调用while循环。

227. Basic Calculator II

要求:有加减乘除,没有括号
思路:这里面涉及到计算的优先级,乘除大于加减,所以要注意
ac:res preval curval 当符号为*或者/的时候,更新preva = preval curval的值,为加减时,更新res的值,

43. Multiply Strings

要求:字符串相乘
思路:构建一个[m + n ]的数组,用于存储乘法的结果, i + j + 1表示当前乘法的低位, i + j表示当前乘法的高位
错误:在存储结果时,如果sb.length() == 0 && p[i] == 0,也就是第一个0是不存入的

537. Complex Number Multiplication

要求:复数的乘法计算
思路:无思路
ac:根据公式,先抽取,学到一个s.indexOf(返回的是从0开始的下表)

6. ZigZag Conversion

要求:给定ZigZag 的输入,得到每一行为单位拼接起来的输出
思路:定义n个StringBuffer,轮流进行添加啊
ac:输出的时候都叠加到buffer0里面

539. Minimum Time Difference

要求:给定了一串时间,输出最小的时间间隔,分钟进行统计
思路:一种思路是设计全部的24*60的bool数组
ac:这个是要比两两计算快很多的,空间换取时间

165. Compare Version Numbers

要求:比较版本号号的大小
思路:从左到右依次乘法,能比较出大小,直接返回,否则继续递归

3. Longest Substring Without Repeating Characters

要求:最长的无重复的子串的长度
思路: 用map来对下标进行映射
ac:每次出现包含,直接更新。

22. Generate Parentheses

要求:给定n,输出所有由n个正反括号组成的字符串链表
思路:有点类似前序遍历,

17。Letter Combinations of a Phone Number

要求:给定一个字符串,对照一个电话表盘,输出所有的可能
思路:每一位都进行对个类型的判定
trick:追加后,得到的新的list,可以直接赋值

71. Simplify Path

要求:对路径进行简化,两个点表示返回父目录
思路:利用stack进行处理
trick:处理时可针弹出的不同类型,进行合理规划

12 Integer to Roman

要求:整数转罗马字符
思路:定义罗马字符数组,定义数值数组,

556 Next Greater Element III

要求:得到交换后的最小的数
思路:3步,第一步找到需要交换的位置,第二步从右边找到最小数进行缓存,对右边的数进行排序

Next Greater Element I

要求: 输出数组中比当前的数的下一个数
利用:stack进行缓存,如果当前数比peek大,tsack,stack pop,用map做相关的对应

Next Greater Element II

要求:输入的数组是循环数组
思路:进行两遍循环,stack里面放入的是index的下标,

468 Validate IP Address

要求:判断ip是否有效
思路:根据当前的ip,判断属于ipv4还是ipv6,或者其他

93 Restore IP Addresses

思路:3层循环,得到四组数每一组进行合理判定

91 Decode Ways

思路:a 到z代表1到26,给定一个字符串,判定一共多少种编码方式,
trick:采用一维dp,注意当出现0的时候,直接continue,如果当前数字和下一个数字组成的数在1到26之间,从后到前加两位,否则加一位

385. Mini Parser

要求:给定了一个数据结构,给定输入的字符串,自己判定得到数据,返回得到相关的形式

459. Repeated Substring Pattern

要求:给定一个字符串,看看是否是有部分字符串重叠形成
思路:kmp算法,如果需要输出,那么就是len - next的最后一个元素

28. Implement strStr()

要求:看一个字符串是不是另外一个字符串的子串
思路:kmp算法,getNext()与字符串比对的程序类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值