LeetCode刷题之路(三)——medium的进阶
来源:互联网 发布:gbase数据库 编辑:程序博客网 时间:2024/06/05 20:11
Problem 2. Add Two Numbers
给定两个链表,每个元素代表一个数位,返回求和结果的链表,譬如:
解题思路:遍历求和,采用尾插法建立新链表即可。
def addTwoNumbers(self, l1, l2): t1 = l1 t2 = l2 root = n = ListNode(0) carry = 0 while t1 or t2 or carry: sum = 0 if t1: sum += t1.val t1 = t1.next if t2: sum += t2.val t2 = t2.next carry, res = divmod(sum+carry, 10) n.next = ListNode(res) n = n.next return root.next
Problem 3. Longest Substring Without Repeating Characters
给定一个字符串s,返回不包含重复值的最长子串的长度。
解题思路:遍历数组,如果当前值s[i]不在s[index:i]中,则我们可以直接将子串长度加1;如果在,我们找到s[i]出现的位置j,则新串的长度为j到i,同时更新index = j +1,注意,我们必须保证在任何时候[index:i]不存在重复字符,然后比较当前长度与max_length的大小。时间复杂度
def lengthOfLongestSubstring(self, s): if not s: return 0 max_length = 1 t_max = 1 index = 0 for i in range(1, len(s)): t_max = i - s[index:i].find(s[i]) - index#find,如果不存在,则返回-1,正好此时长度加1,因此可以将当前元素是否存在于当前子串的两者情况合并。 index += s[index:i].find(s[i]) + 1 max_length = max(max_length, t_max) return max_length
Problem 5. Longest Palindromic Substring
给定一个字符串s,返回最长回文子串。
解题思路:有两种解法,第一种DP,即我们考虑以第i个字符结尾的最长回文子串s[i],此时s[i-1]长度为l,分三种情况:
- s[i-l-1] = s[i],则s[i] = s[i-1] +2
- s[i-l:i+1](不包括i+1)构成回文,则s[i] = s[i-1] +1
- s[i-l+1:i+1]构成回文,则s[i] = s[i-1]
第二种思路,即考虑,从数组的每个位置向两边扩张,求得最长的回文长度,注意,在每个位置需要分两种情况讨论,奇数,则从i向两边扩;偶数,则分别从i和i+1向两边扩。
def extend(self,s,l,r): while l>=0 and r<len(s) and s[l]==s[r]: l -= 1 r += 1 return l+1, r-l-1 def longestPalindrome(self, s): max_length = start = 0 if len(s) < 2: return s for i in range(len(s) - 1): s1, l_odd = self.extend(s, i, i) s2, l_even = self.extend(s, i, i+1) if max_length < max(l_even,l_odd): max_length = max(l_even,l_odd) start = s1 if l_odd > l_even else s2 return s[start:start+max_length]
阅读全文
0 0
- LeetCode刷题之路(三)——medium的进阶
- LeetCode的medium题集合(C++实现)三
- 算法分析与设计——leetcode刷题之Add Two Numbers(Medium)
- Python进阶之路—三
- 我的python进阶之路三
- leetcode第一题(medium)——Two Sum
- LeetCode刷题(C++)——ZigZag Conversion(Medium)
- LeetCode刷题(C++)——3Sum(Medium)
- LeetCode刷题(C++)——Generate Parentheses(Medium)
- LeetCode刷题(C++)——4Sum(Medium)
- LeetCode刷题(C++)——Next Permutation(Medium)
- LeetCode刷题(C++)——Sort Colors(Medium)
- LeetCode刷题(C++)——Rotate List(Medium)
- LeetCode刷题(C++)——Word Search(Medium)
- LeetCode刷题(C++)——Sort List(Medium)
- LeetCode刷题——Swap Nodes in Pairs(Medium)
- leetcode进阶之路——Longest Palindromic Substring
- Leetcode进阶之路——Rotate Image
- 剑指offer_9 变态跳台阶
- Java 内存区域和GC机制
- 高血压的现代亚健康
- 在win7 32位系统中安装配置Python的机器学习包scikit-learn
- IO多路复用:select,poll,epoll的区别
- LeetCode刷题之路(三)——medium的进阶
- Java中的 强引用、软引用、弱引用、虚引用使用
- Mark-20170824-Ubuntu 14.04 apt-get 安装 Ansible 为非最新版本
- Centos 7 学习之添加用户
- 番茄时钟P002
- 杭电 2567 寻梦(606比赛选拔 2017-08-20)(1005)
- 设计模式C++版:第十六式享元模式
- “米粉节”背后的故事——小米网抢购系统开发实践
- HTTPS请求添加请求头