Skip to content

Commit d30c9f7

Browse files
committed
New IB Sol
1 parent af942a5 commit d30c9f7

File tree

5 files changed

+116
-0
lines changed

5 files changed

+116
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def lcs(s1, s2):
2+
m = len(s1)
3+
n = len(s2)
4+
5+
dp = [[None]*(n+1) for i in range(m+1)]
6+
7+
for i in range(m+1):
8+
for j in range(n+1):
9+
if i == 0 or j == 0:
10+
dp[i][j] = 0
11+
elif s1[i-1] == s2[j-1]:
12+
dp[i][j] = dp[i-1][j-1] + 1
13+
else:
14+
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
15+
16+
return dp[m][n]
17+
x = "AGGTAB"
18+
y = "GXTXAYB"
19+
print "Length of LCS is ", lcs(x, y)

Dynamic-Programming/Word-break.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def wordBreak(s,dic):
2+
segmented = [True]
3+
for i in range(len(s)):
4+
segmented.append(False)
5+
for j in range(i,-1,-1):
6+
if segmented[j] and s[j:i+1] in dic:
7+
segmented[i+1] = True
8+
break
9+
return segmented[len(s)]
10+
s = "myinterviewtrainer"
11+
dic = ["interview","my","trainer"]
12+
print wordBreak(s,dic)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#Complexity O(n*n)
2+
def lis(arr):
3+
n = len(arr)
4+
5+
dp = [1]*n
6+
7+
for i in range(1, n):
8+
for j in range(0,i):
9+
if arr[i] > arr[j] and dp[i] < dp[j] + 1:
10+
dp[i] = dp[j] + 1
11+
return max(dp)
12+
arr = [10,22,9,33,21,50,41,60]
13+
print "Length of LIS is ", lis(arr)

Greedy/InterleavingStrings.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#Complexity O(M+N)
2+
def isInterleaved(a,b,c):
3+
i, j, k = 0, 0, 0
4+
5+
while k !=len(c)-1:
6+
if a[i] == c[k]:
7+
i += 1
8+
elif b[j] == c[k]:
9+
j += 1
10+
else:
11+
return 0
12+
13+
k += 1
14+
if a[i-1] or b[j-1]:
15+
return 0
16+
return 1
17+
18+
a = "AB"
19+
b = "CD"
20+
c = "ACBG"
21+
if isInterleaved(a,b,c) == 1:
22+
print c + "is Interleaved of "+ a + " and " + b
23+
else:
24+
print "Not Interleaved"
25+
26+
27+
#Dynamic Approach
28+
def isInterleaved(a,b,c):
29+
m = len(a)
30+
n = len(b)
31+
32+
table = [[False for i in range(n+1)] for i in range(m+1)]
33+
34+
if m+n != len(c):
35+
return False
36+
37+
for i in range(m+1):
38+
for j in range(n+1):
39+
if i == 0 and j == 0:
40+
table[i][j] = True
41+
elif i == 0 and (b[j-1] == c[j-1]):
42+
table[i][j] = table[i][j-1]
43+
elif j == 0 and a[i-1] == c[i-1]:
44+
table[i][j] = table[i-1][j]
45+
elif a[i-1] == c[i+j-1] and b[j-1] != c[i+j-1]:
46+
table[i][j] = table[i-1][j]
47+
elif a[i-1] != c[i+j-1] and b[j-1] == c[i+j-1]:
48+
table[i][j] = table[i][j-1]
49+
elif a[i-1] == c[i+j-1] and b[j-1] == c[i+j-1]:
50+
table[i][j] = table[i-1][j] or table[i][j-1]
51+
return table[m][n]

LinkedList/Reverse-LinkedList-ii.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
def reverseBetween(head, m, n):
2+
if m == n:
3+
return head
4+
dummyNode = ListNode(0)
5+
dummyNode.next = head
6+
prev = dummyNode
7+
8+
for i in range(m-1):
9+
prev = prev.next
10+
11+
rev = None
12+
curr = prev.next
13+
14+
for i in range(n-m+1):
15+
next = curr.next
16+
curr.next = rev
17+
rev = curr
18+
curr = next
19+
prev.next.next = curr
20+
prev.next = reverse
21+
return dummyNode.next

0 commit comments

Comments
 (0)