leetcode_字符串
东大梅西
这个作者很懒,什么都没留下…
展开
-
LintCode13 · 字符串查找(KMP算法实现)
题目描述解法一:暴力求解暴力求解就不多说什么废话了,直接上代码了 public int strStr(String source, String target) { char[] s = source.toCharArray(); char[] t = target.toCharArray(); int m = s.length; int n = t.length; int i = 0, j = 0;原创 2021-06-27 21:10:44 · 147 阅读 · 2 评论 -
字典树例题 LintCode623 · K步编辑
题目描述题目分析字母树动态规划组成部分一:确定状态动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 char[] tar = null; int K = 0; int n = 0; List<String> res = null; public List<String> kDistance(String[] words, String target, int k) {原创 2021-06-24 14:06:51 · 142 阅读 · 0 评论 -
背包问题变种 LintCode89 k Sum(K数之和)
题目描述题目分析动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int kSum(int[] A, int K, int target) { int len = A.length; int[][][] f = new int[len + 1][K + 1][target + 1]; f[0][0][0] = 1;原创 2021-06-22 00:40:32 · 149 阅读 · 0 评论 -
LintCode91 Minimum Adjustment Cost(最小调整代价)
题目描述动态规划组成部分一:确定状态设修改后的数组为B。最后一步:将A改成B,A[n-1]改成X,这一步代价是|A[n-1]-X|。-需要确保|X-B[n-2]|<=target前面n-1个元素A[0…n-2]改成B[0…n-2],需要知道最小代价,并确保B[0…n-2]中任意两个相邻的元素的差不超过target但是有一个问题,改A[n-1]时不知道B[n-2]是多少只有知道了B[n-2],才能确定A[n-1]能改成(B[n-2]-target,B[n-2]+target)原创 2021-06-21 23:46:06 · 227 阅读 · 1 评论 -
类多重背包问题例题 Lintcode668 Ones and Zeroes(一和零)
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int findMaxForm(String[] strs, int m, int n) { int len = strs.length; int[] zero = new int[len]; int[] one = new int[len]; char[原创 2021-06-21 18:48:07 · 71 阅读 · 0 评论 -
双序列型动态规划例题6 Lintcode192 (通配符匹配)Wildcard Matching
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toC原创 2021-06-21 11:17:54 · 83 阅读 · 0 评论 -
双序列型动态规划例题5 Lintcode154 (正则表达式匹配)Regular Expression Matching
题目描述动态规划组成部分一:确定状态子问题动态规划二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toCh原创 2021-06-20 16:37:56 · 79 阅读 · 0 评论 -
双序列型动态规划例题4 Lintcode118 (不同的子序列)Distinct Subsequence
题目描述题目分析动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况注意:这里的f[i][0]=1不是凭空设置的,而是根据实际情况和转移方程计算出来的,这是一个初始条件。动态规划组成部分四:计算顺序Java代码实现 public int numDistinct(String S, String T) { int m = S.length(); int n = T.length();原创 2021-06-18 15:56:39 · 66 阅读 · 0 评论 -
双序列型动态规划例题3 Lintcode119 (编辑距离)Edit Distance
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); char[] ch1 = word1.toCharArray(原创 2021-06-18 14:21:18 · 88 阅读 · 0 评论 -
双序列型动态规划例题2 Lintcode29 Interleaving String
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isInterleave(String s1, String s2, String s3) { int m = s1.length(); int n = s2.length(); if (m + n != s3.length())原创 2021-06-18 12:50:07 · 68 阅读 · 0 评论 -
双序列型动态规划例题1 Lintcode77Longest Common Subsequence
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int longestCommonSubsequence(String A, String B) { int m = A.length(); int n = B.length(); char[] a = A.toCharArray(); char[] b = B.t原创 2021-06-17 21:21:19 · 108 阅读 · 0 评论 -
lintcode200 · 最长回文子串(马拉车算法)
题目描述Manacher’s Algorithm 马拉车算法马拉车算法 Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性。首先我们解决下奇数和偶数的问题,在每个字符间插入"#",并且为了使得扩展的过程中,到边界后自动结束,在两端分别插入 “^” 和 “$”,两个不可能在字符串中出现的字符,这样中心扩展的时候,判断两端字符是否相等的时候,如果到了边界就一定会不相等,从转载 2021-06-17 19:32:20 · 129 阅读 · 0 评论 -
Hard! lintcode430 · 攀爬字符串
题目描述给定一个字符串 s, 将其递归地分割成两个非空子字符串, 然后可以得到一棵二叉树.下面是 s = “great” 可能得到的一棵二叉树:在攀爬字符串的过程中, 我们可以选择其中任意一个非叶节点, 交换该节点的两个子节点.例如,我们选择了 “gr” 节点, 并将该节点的两个子节点进行交换, 并且将祖先节点对应的子串部分也交换, 最终得到了 “rgeat”. 我们认为 “rgeat” 是 “great” 的一个攀爬字符串.类似地, 如果我们继续将其节点 “eat” 和 “at” 的子节点交原创 2021-06-09 13:48:18 · 98 阅读 · 0 评论 -
leetcode_3_无重复字符的最长子串
思路:解决此类问题的算法一般是应用滑动窗口,设置一个start作为窗口的左界,end作为窗口的右界,如下图所示:同时需要一个Map<Character,Integer>来保存特定字符最近出现的索引。在遍历字符串的每个字符时,都要对其对应的val进行更新,对当前已知的最长字串长度进行更新,如果是与之前重复过的字符,则还要更新滑动窗口的左界start,将start调整为上一次遇到这个字符的下一个位置,这样保证当前滑动窗口内不存在重复字符。下面是具体的代码:public int lengt.原创 2021-03-18 15:50:24 · 75 阅读 · 0 评论