Skip to content

Commit

Permalink
two pointer
Browse files Browse the repository at this point in the history
  • Loading branch information
GenesisBlock3301 committed Dec 27, 2023
1 parent 1619192 commit 419ea51
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 37 deletions.
14 changes: 8 additions & 6 deletions two_pointer/Valid_Palindrome_II.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# https://leetcode.com/problems/valid-palindrome-ii/
def valid_palindrome(s):
start, end = 0, len(s) - 1
left = left_delete(start,end)
right = right_delete(start,end)
left = left_delete(start, end)
right = right_delete(start, end)
return left or right

def left_delete(start,end):

def left_delete(start, end):
c = 0
while start <= end:
if c > 1:
Expand All @@ -18,14 +19,15 @@ def left_delete(start,end):
end -= 1
return True

def right_delete(start,end):

def right_delete(start, end):
c = 0
while start <= end:
if c > 1:
return False
if s[start] != s[end]:
c += 1
end-= 1
end -= 1
else:
start += 1
end -= 1
Expand All @@ -36,4 +38,4 @@ def right_delete(start,end):
# s = "abca"
s = "tebbem"
# s = "cbbcc"
print(valid_palindrome(s))
print(valid_palindrome(s))
6 changes: 3 additions & 3 deletions two_pointer/linkListcycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ def cycle_check(self, head):
if fast == slow:
return True
return False

def cycle_check_medium(self, head):
s = set()
temp = head
c = 0
while temp:
if temp in s:
return f"tail connects to node index {c}"
c+=1
c += 1
s.add(temp)
temp = temp.next
return "no cycle"
Expand Down Expand Up @@ -66,7 +66,7 @@ def append_to_tail(self, val):
self.head = node
else:
current_node = self.head
while current_node.next != None:
while current_node.next is not None:
current_node = current_node.next
current_node.next = node
return self.head
Expand Down
13 changes: 7 additions & 6 deletions two_pointer/reverse_array.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# reverse array in place
def reverse(nums):
start, end = 0, len(nums)-1
start, end = 0, len(nums) - 1
while start < end:
nums[start],nums[end] = nums[end],nums[start]
start+=1
end-= 1
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
return nums

nums = [1,2,3,4,5]
print(reverse(nums))

nums = [1, 2, 3, 4, 5]
print(reverse(nums))
13 changes: 7 additions & 6 deletions two_pointer/reverse_string.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@

def reverse_string(s):
start, end = 0,len(s)-1
start, end = 0, len(s) - 1

while start < end:
s[start],s[end] = s[end],s[start]
start+=1
s[start], s[end] = s[end], s[start]
start += 1
end -= 1
return s
s = ["h","e","l","l","o"]
print(reverse_string(s))


s = ["h", "e", "l", "l", "o"]
print(reverse_string(s))
23 changes: 12 additions & 11 deletions two_pointer/reverse_string_II.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
# https://leetcode.com/problems/reverse-string-ii/

def reverse_II(s,k):
def reverse_II(s, k):
if k > len(s):
return s
if len(s) == k:
return s[::-1]
start,end = 0,len(s)-1
start, end = 0, len(s) - 1
s = list(s)
while start < end:
st, en = start,(start+k)-1
print("==",st,en,len(s[st:en]))
st, en = start, (start + k) - 1
print("==", st, en, len(s[st:en]))
while st < en:
print("before",s[st],s[en])
s[st],s[en] = s[en],s[st]
print("before", s[st], s[en])
s[st], s[en] = s[en], s[st]
print("after", s[st], s[en])
st+=1
en-=1
print(start,start+k)
start += 2*k
st += 1
en -= 1
print(start, start + k)
start += 2 * k
return "".join(s)


# s = "abcdefg"
# k = 8
# s = "abcd"
Expand All @@ -28,4 +29,4 @@ def reverse_II(s,k):
# k = 3
s = "hyzqyljrnigxvdtneasepfahmtyhlohwxmkqcdfehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl"
k = 39
print(reverse_II(s,k))
print(reverse_II(s, k))
2 changes: 1 addition & 1 deletion two_pointer/sorted_square.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def square_sorted(nums):
start, end = 0, n-1
res = [0]*n
index = n-1
while end >=0 and start >= 0:
while end >= 0 and start >= 0:
if abs(nums[start]) > abs(nums[end]):
res[index] = nums[start]*nums[start]
start += 1
Expand Down
9 changes: 5 additions & 4 deletions two_pointer/valid_palindrome.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
#

def valid_palindrom(s):
def valid_palindrome(s):
s = s.lower()
arr = [x for x in s if x.isalnum()]
start, end = 0, len(arr) - 1
while start < end:
if arr[start].isalnum() and arr[end].isalnum():
if arr[start].lower() != arr[end].lower():
return False
start+=1
end-=1
start += 1
end -= 1
return True

print(valid_palindrom("A man, a plan, a canal: Panama"))

print(valid_palindrome("A man, a plan, a canal: Panama"))

0 comments on commit 419ea51

Please sign in to comment.