Skip to content

Commit 2640de3

Browse files
committed
last time update
1 parent ab460d2 commit 2640de3

3 files changed

+99
-6
lines changed

03-无重复字符的最长子串.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/*
2-
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
2+
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
33
4-
示例 1:
4+
示例 1:
55
66
输入: "abcabcbb"
7-
输出: 3
7+
输出: 3
88
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
99
示例 2:
1010
@@ -15,13 +15,13 @@
1515
1616
输入: "pwwkew"
1717
输出: 3
18-
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
19-
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
18+
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
19+
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
2020
*/
2121
func lengthOfLongestSubstring(s string) int { //滑动窗口法
2222
max:=func (a int,b int) int{if a>b {return a} else {return b}} //匿名函数
2323
var m=map[rune]int{} //用map加快查找
24-
var start,maxlen int
24+
var start,maxlen int
2525
for index,char:=range s{
2626
j,ok:=m[char]
2727
if ok {

160. 相交链表.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。
2+
# 如果两个链表没有交点,返回 null 。
3+
#
4+
# 图示两个链表在节点 c1 开始相交:
5+
#
6+
# 题目数据 保证 整个链式结构中不存在环。
7+
#
8+
# 注意,函数返回结果后,链表必须 保持其原始结构 。
9+
#
10+
# 示例 1:
11+
# 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
12+
# 输出:Intersected at '8'
13+
# 解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
14+
# 从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。
15+
# 在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
16+
#
17+
# 示例 2:
18+
# 输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
19+
# 输出:Intersected at '2'
20+
# 解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
21+
# 从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。
22+
# 在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。
23+
#
24+
# 示例 3:
25+
# 输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
26+
# 输出:null
27+
# 解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
28+
# 由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
29+
# 这两个链表不相交,因此返回 null 。
30+
#
31+
# 提示:
32+
# listA 中节点数目为 m
33+
# listB 中节点数目为 n
34+
# 0 <= m, n <= 3 * 104
35+
# 1 <= Node.val <= 105
36+
# 0 <= skipA <= m
37+
# 0 <= skipB <= n
38+
# 如果 listA 和 listB 没有交点,intersectVal 为 0
39+
# 如果 listA 和 listB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]
40+
#
41+
# 进阶:你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?
42+
43+
# Definition for singly-linked list.
44+
class ListNode:
45+
def __init__(self, x):
46+
self.val = x
47+
self.next = None
48+
49+
class Solution:
50+
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
51+
if headA is None or headB is None:
52+
return None
53+
54+
pA, pB = headA, headB
55+
while pA != pB:
56+
if pA.next is None and pB.next is None:
57+
return None
58+
pA = headB if pA.next is None else pA.next
59+
pB = headA if pB.next is None else pB.next
60+
return pA

3. 无重复字符的最长子串.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
2+
#
3+
# 示例 1:
4+
#
5+
# 输入: "abcabcbb"
6+
# 输出: 3
7+
# 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
8+
# 示例 2:
9+
#
10+
# 输入: "bbbbb"
11+
# 输出: 1
12+
# 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
13+
# 示例 3:
14+
#
15+
# 输入: "pwwkew"
16+
# 输出: 3
17+
# 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
18+
# 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
19+
20+
class Solution:
21+
def lengthOfLongestSubstring(self, s: str) -> int:
22+
if len(s) == 0:
23+
return 0
24+
ans = 1
25+
m = {s[0]: 0} # m 动态记录窗口划过的各个字符上一次出现的位置
26+
begin, end = 0, 1
27+
while end < len(s):
28+
if s[end] in m and m[s[end]] >= begin:
29+
begin = m[s[end]] + 1
30+
m[s[end]] = end
31+
end += 1
32+
ans = max(ans, end - begin)
33+
return ans

0 commit comments

Comments
 (0)