Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b633a48

Browse files
Merge pull request #18 from mihirs16/master
2 parents 0688d0e + 7bb22e8 commit b633a48

5 files changed

+125
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# add two numbers | leetcode 02 | https://leetcode.com/problems/add-two-numbers/
2+
3+
# Definition for singly-linked list.
4+
class ListNode:
5+
def __init__(self, val=0, next=None):
6+
self.val = val
7+
self.next = next
8+
9+
class Solution:
10+
def addTwoNumbers(self, l1: list[ListNode], l2: list[ListNode]) -> list[ListNode]:
11+
res = ListNode()
12+
head = res
13+
14+
while l1 != None or l2 != None:
15+
if l1 == None:
16+
this_val = res.val + l2.val
17+
l2 = l2.next
18+
elif l2 == None:
19+
this_val = res.val + l1.val
20+
l1 = l1.next
21+
else:
22+
this_val = res.val + l1.val + l2.val
23+
l1, l2 = l1.next, l2.next
24+
25+
this_digit = this_val % 10
26+
next_digit = this_val // 10
27+
28+
res.val = this_digit
29+
if l1 != None or l2 != None:
30+
res.next = ListNode(next_digit)
31+
res = res.next
32+
33+
if next_digit > 0:
34+
res.next = ListNode(next_digit)
35+
res = res.next
36+
37+
return head
38+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# longest substring without repeating characters | leetcode 03 | https://leetcode.com/problems/longest-substring-without-repeating-characters
2+
# sliding window; remove elements until last occurence of current duplicate
3+
4+
class Solution:
5+
def lengthOfLongestSubstring(self, s: str) -> int:
6+
ptrL = 0
7+
seen = dict()
8+
longest = 0
9+
10+
for ptrR in range(len(s)):
11+
while seen.get(s[ptrR]) is not None:
12+
seen.pop(s[ptrL])
13+
ptrL += 1
14+
seen[s[ptrR]] = True
15+
longest = max(ptrR - ptrL + 1, longest)
16+
17+
return longest
18+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# longest consecutive sequence | leetcode 128 | https://leetcode.com/problems/longest-consecutive-sequence/
2+
# set to look-up previous and next numbers; nested while loop is O(2n)
3+
4+
class Solution:
5+
def longestConsecutive(self, nums: list[int]) -> int:
6+
if nums == []:
7+
return 0
8+
9+
all = set(nums)
10+
longest = 0
11+
12+
for each in all:
13+
if each - 1 not in all:
14+
curr = each
15+
seq = 1
16+
while curr + 1 in all:
17+
seq += 1
18+
curr = curr + 1
19+
if seq > longest:
20+
longest = seq
21+
22+
return longest
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# longest repeating character replacement | leetcode 424 | https://leetcode.com/problems/longest-repeating-character-replacement/
2+
# keep track of max freq in sliding window and check if size of window - max freq > k
3+
4+
class Solution:
5+
def characterReplacement(self, s: str, k: int) -> int:
6+
ptrL = 0
7+
ptrR = 0
8+
longest = 0
9+
freq = dict()
10+
max_freq = 0
11+
w_size = 0
12+
13+
for ptrR in range(len(s)):
14+
freq[s[ptrR]] = 1 + freq.get(s[ptrR], 0)
15+
max_freq = max(max_freq, freq[s[ptrR]])
16+
17+
if (ptrR - ptrL + 1) - max_freq > k:
18+
freq[s[ptrL]] -= 1
19+
ptrL += 1
20+
21+
longest = max(longest, (ptrR - ptrL + 1))
22+
23+
return longest
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# find all anagrams in string | leetcode 438 | https://leetcode.com/problems/find-all-anagrams-in-a-string/
2+
# sliding window to track "which" substring; add ptr2 to counter, remove ptr1 from counter
3+
4+
5+
from collections import Counter
6+
7+
class Solution:
8+
def findAnagrams(self, s: str, p: str) -> list[int]:
9+
Ns, Np = len(s), len(p)
10+
ptr1 = 0
11+
ptr2 = Np - 1
12+
anagrams = []
13+
freq_s, freq_p = Counter(s[ptr1:(ptr2 + 1)]), Counter(p)
14+
15+
while ptr2 < Ns:
16+
if freq_s == freq_p:
17+
anagrams.append(ptr1)
18+
freq_s[s[ptr1]] -= 1
19+
ptr1 += 1
20+
ptr2 += 1
21+
if ptr2 != Ns:
22+
freq_s[s[ptr2]] = 1 + freq_s.get(s[ptr2], 0)
23+
24+
return anagrams

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /