mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-04-18 03:37:35 +00:00
Update palindrome.py (#1509)
* Update palindrome.py Add Doctests. * Use test_data to drive the testing
This commit is contained in:
parent
e3d4d2bb57
commit
1ed47ad6f4
@ -1,9 +1,31 @@
|
|||||||
# Program to find whether given string is palindrome or not
|
# Algorithms to determine if a string is palindrome
|
||||||
def is_palindrome(str):
|
|
||||||
|
test_data = {
|
||||||
|
"MALAYALAM": True,
|
||||||
|
"String": False,
|
||||||
|
"rotor": True,
|
||||||
|
"level": True,
|
||||||
|
"A": True,
|
||||||
|
"BB": True,
|
||||||
|
"ABC": False,
|
||||||
|
"amanaplanacanalpanama": True, # "a man a plan a canal panama"
|
||||||
|
}
|
||||||
|
# Ensure our test data is valid
|
||||||
|
assert all((key == key[::-1]) is value for key, value in test_data.items())
|
||||||
|
|
||||||
|
|
||||||
|
def is_palindrome(s: str) -> bool:
|
||||||
|
"""
|
||||||
|
Return True if s is a palindrome otherwise return False.
|
||||||
|
|
||||||
|
>>> all(is_palindrome(key) is value for key, value in test_data.items())
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
|
||||||
start_i = 0
|
start_i = 0
|
||||||
end_i = len(str) - 1
|
end_i = len(s) - 1
|
||||||
while start_i < end_i:
|
while start_i < end_i:
|
||||||
if str[start_i] == str[end_i]:
|
if s[start_i] == s[end_i]:
|
||||||
start_i += 1
|
start_i += 1
|
||||||
end_i -= 1
|
end_i -= 1
|
||||||
else:
|
else:
|
||||||
@ -11,21 +33,34 @@ def is_palindrome(str):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
# Recursive method
|
def is_palindrome_recursive(s: str) -> bool:
|
||||||
def recursive_palindrome(str):
|
"""
|
||||||
if len(str) <= 1:
|
Return True if s is a palindrome otherwise return False.
|
||||||
|
|
||||||
|
>>> all(is_palindrome_recursive(key) is value for key, value in test_data.items())
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
if len(s) <= 1:
|
||||||
return True
|
return True
|
||||||
if str[0] == str[len(str) - 1]:
|
if s[0] == s[len(s) - 1]:
|
||||||
return recursive_palindrome(str[1:-1])
|
return is_palindrome_recursive(s[1:-1])
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def is_palindrome_slice(s: str) -> bool:
|
||||||
str = "ama"
|
"""
|
||||||
print(recursive_palindrome(str.lower()))
|
Return True if s is a palindrome otherwise return False.
|
||||||
print(is_palindrome(str.lower()))
|
|
||||||
|
>>> all(is_palindrome_slice(key) is value for key, value in test_data.items())
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
return s == s[::-1]
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
for key, value in test_data.items():
|
||||||
|
assert is_palindrome(key) is is_palindrome_recursive(key)
|
||||||
|
assert is_palindrome(key) is is_palindrome_slice(key)
|
||||||
|
print(f"{key:21} {value}")
|
||||||
|
print("a man a plan a canal panama")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user