forked from thatguyintech/100-day-coding-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreverseStr.py
60 lines (50 loc) · 1.46 KB
/
reverseStr.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def reverseStr(s, k):
# edge
size = len(s)
if size < k:
return s[::-1]
# convert string to list
letters = list(s)
i = 0
# reverse all the full chunks
while i + 2*k-1 < size:
reverse(letters, i, i+k-1)
i += 2*k
# take care of the remainder
if i+k-1 < size:
reverse(letters, i, i+k-1)
else:
reverse(letters, i, size-1)
# fin
return "".join(letters)
# reverses the indices of arr between start and end, in place
def reverse(arr, start, end):
while start < end:
arr[start], arr[end] = arr[end], arr[start]
start += 1
end -= 1
def testReverse():
t1 = [0, 1, 2, 3, 4]
reverse(t1, 0, 2)
assert t1 == [2, 1, 0, 3, 4]
t2 = [0, 1, 2, 3, 4]
reverse(t2, 1, 3)
assert t2 == [0, 3, 2, 1, 4]
def testReverseStr():
assert reverseStr("", 1) == ""
assert reverseStr("", 2) == ""
assert reverseStr("", 10000) == ""
assert reverseStr("abcdefg", 1) == "abcdefg"
assert reverseStr("abcdefg", 2) == "bacdfeg"
assert reverseStr("abcdefg", 3) == "cbadefg"
assert reverseStr("abcdefg", 4) == "dcbaefg"
assert reverseStr("abcdefg", 5) == "edcbafg"
assert reverseStr("abcdefg", 6) == "fedcbag"
assert reverseStr("abcdefg", 7) == "gfedcba"
assert reverseStr("abcdefg", 8) == "gfedcba"
assert reverseStr("abcdefg", 9) == "gfedcba"
def main():
testReverse()
testReverseStr()
if __name__ == "__main__":
main()