随笔分类 -  leetcode

摘要:DP解 dp[i][j] :表示s(i~j)是否可以构成回文串,是一个boolean二维数组 dp[i][j] = dp[i+1][j-1] && s.charAt(i) == s.charAt(j) 注意当子串长度为0,1,2时不需要考虑i+1~j-1,只需要考虑i和j是否相等 所以上式改为dp[ 阅读全文
posted @ 2019-06-14 15:28 南山南北秋悲 阅读(134) 评论(0) 推荐(0)
摘要:lc125 Valid Palindrome 法一: 双指针 首尾指针向中间收缩,比较两者指向元素是否相同 不相同就返回false 若遇到非数字非字母的字符,跳过,这里可以手写if判断,也可以用Character内置函数Character.isLetterOrDigit() 还有一点需要注意,同一个 阅读全文
posted @ 2019-06-14 13:18 南山南北秋悲 阅读(140) 评论(0) 推荐(0)
摘要:lc395 Longest Substring with At Least K Repeating Characters 思路是按子串中不同字母的个数来计算,1~26 每次计算n个不同字母所能构成的最长子串 记录其中最长子串 单次循环中,用双指针end向后遍历s,begin用来计算子串长度 当见过的 阅读全文
posted @ 2019-06-12 14:50 南山南北秋悲 阅读(330) 评论(0) 推荐(0)
摘要:lc3 Longest Substring Without Repeating Characters 思路就是,每次碰到出现第二次的字符时,更新maxLen,并且从该字符第一次出现位置后一个字母继续计算满足题意的子串长度 法一: hashmap, key放字母,用来检查是否出现过 value放key 阅读全文
posted @ 2019-06-12 14:15 南山南北秋悲 阅读(143) 评论(0) 推荐(0)
摘要:lc1079 Letter Tile Possibilities 利用递归解决 观察题目给出的例子 AAB 按照长度分 A, B AA, AB, BA AAB, ABA, BAA 不难发现,长度为n的解可由长度为n-1的解推出 利用递归,每次长度为n的解可以递归了化简至长度为1 而且为了避免记录组合 阅读全文
posted @ 2019-06-12 11:28 南山南北秋悲 阅读(992) 评论(0) 推荐(0)
摘要:lc1078 Occurrences After Bigram trim().split()将原字符串转换成words数组 依次匹配first和second,若两者都能匹配上,则下一个单词为third,将其加入List<String> res 返回 res.toArray(new String[0] 阅读全文
posted @ 2019-06-10 11:22 南山南北秋悲 阅读(218) 评论(0) 推荐(0)
摘要:lc30 Substring with Concatenation of All Words 两个hashmap 一个用来记录words[]中每种单词的出现次数,用来之后做匹配 一个用来记录source字符串i~j中每种单词出现次数,与前者比对 思路就是检查source字符串所有连续的长为words 阅读全文
posted @ 2019-06-09 10:07 南山南北秋悲 阅读(127) 评论(0) 推荐(0)
摘要:lc76 Minimum Window Substring haspmap(也可以用数组[26])和双指针 hashmap用来统计target字符串每种字符的个数,以此来检测source子串是否满足条件 双指针, 一个right用来遍历source字符串,也是计算满足条件子串长度时的右侧边界 一个l 阅读全文
posted @ 2019-06-08 08:28 南山南北秋悲 阅读(176) 评论(0) 推荐(0)
摘要:分类讨论的项比较多 先观察给的例子,还有题目给的提示——valid答案中可以包含的字符 发现: "+ - "要么在开头,要么紧跟着e,只有这两个位置 "e",前后必须有数字,且之前不能出现过e ". ",前面不能出现过e或". " 所以我们可以用几个flag seenNum表示之前出现过数字 see 阅读全文
posted @ 2019-06-07 07:56 南山南北秋悲 阅读(154) 评论(0) 推荐(0)
摘要:Lc68 Text Justification 我们首先要确定当前这一行能放下words[i]~words[?], 然后是如何分配空格, 如果是最后一行或是这一行只能放下一个单词,那么空格应该全部在右侧 否则,应该平均分配,余下的依次从左到右分配 阅读全文
posted @ 2019-06-06 07:47 南山南北秋悲 阅读(172) 评论(0) 推荐(0)
摘要:lc273 Integer to English Words 分析英文的计数规则,1000一个循环,thousand,million,billion,trillion,所以我们可以每1000处理一次,后面加上相应的thousand或是million… 然后再看1000以内规则: hundred一档, 阅读全文
posted @ 2019-06-05 06:57 南山南北秋悲 阅读(146) 评论(0) 推荐(0)
摘要:lc12 Integer to Roman 因为题目输入只有1~3999,只需要将所有情况列出即可 阅读全文
posted @ 2019-06-04 10:00 南山南北秋悲 阅读(169) 评论(0) 推荐(0)
摘要:lc1071 Greatest Common Divisor of Strings 找两个字符串的最长公共子串 假设:str1.length > str2.length 因为是公共子串,所以str2一定可以和str1前面一部分匹配上,否则不存在公共子串。 所以我们比较str2和str1的0~str2 阅读全文
posted @ 2019-06-04 09:54 南山南北秋悲 阅读(574) 评论(0) 推荐(0)
摘要:lc6 ZigZag Conversion 分成两步, 第一步垂直向下, 1 1 1 1 第二步倾斜向上 1 1 1 1 1 1 1 用nRows个StringBuilder 然后将他们合并即可 阅读全文
posted @ 2019-06-03 13:26 南山南北秋悲 阅读(151) 评论(0) 推荐(0)
摘要:lc13 Roman to Integer 遇到那六种特殊情况分别-2,-20,-200, 按照罗马数字的规则,每种只可能出现一次。所以只需要考虑一次,用indexOf()即可判断是否出现这几种特殊情况 然后遍历s,按照每个字符的定义,加上value即可 阅读全文
posted @ 2019-06-03 12:39 南山南北秋悲 阅读(118) 评论(0) 推荐(0)
摘要:lc171 Excel Sheet Column Number 可以从高位往低位走,例如:”ACANV”从A->V 也可以从低位往高位走: V->A 第一种解法: for(int i=0; i<s.length(); i++) 每次迭代时,res 先*26 再加s[i]-‘A’+1 第二种解法 i= 阅读全文
posted @ 2019-06-03 12:24 南山南北秋悲 阅读(113) 评论(0) 推荐(0)
摘要:lc168 Excel Sheet Column Title 有点像进制转换 1~26 : A~Z 27~52(26*1 + 1~26) : AA~AZ 53~81 (26*2 + 1~26): BA~BZ 26*26 + 1~26 : ZA~ZZ (26^2*1 + 26*1 + 1~16): A 阅读全文
posted @ 2019-06-03 12:08 南山南北秋悲 阅读(135) 评论(0) 推荐(0)
摘要:lc316 Remove Duplicate Letters 我们用一个栈来保存最终的返回结果, 现在来看看什么时候能删除一个元素,bcabc走到a的时候发现c大于a而且a后还有c,所以可以删除 由此可见,当array[i]之前的字母较大,且在i之后还有重复的字母,就能删除 如何实现这个逻辑呢? 1 阅读全文
posted @ 2019-06-03 11:56 南山南北秋悲 阅读(413) 评论(0) 推荐(0)
摘要:一个prev保存前一个状态,一个cur保存这次的状态每次按题意操作prev,然后赋值给cur 如何按题意操作呢? 1 11 21 1211 111221 一个变量say保存到目前为止相同的值,直到say和prev[i]不同,就给cur插入say的个数,和say的值,然后更新say为prev[i] 阅读全文
posted @ 2019-06-03 11:36 南山南北秋悲 阅读(177) 评论(0) 推荐(0)
摘要:lc179 Largest Number 主要考comparator的重写,思路很简单 将int[]转成String[],然后排降序 排好之后依次放入结果字符串即可 如何排序?按什么规则呢? 先看几个例子 "9" "987" -> "9987" > "9879" "123" "213" -> "12 阅读全文
posted @ 2019-06-01 11:40 南山南北秋悲 阅读(221) 评论(0) 推荐(0)