mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +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
|
||||
def is_palindrome(str):
|
||||
# Algorithms to determine if a string is palindrome
|
||||
|
||||
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
|
||||
end_i = len(str) - 1
|
||||
end_i = len(s) - 1
|
||||
while start_i < end_i:
|
||||
if str[start_i] == str[end_i]:
|
||||
if s[start_i] == s[end_i]:
|
||||
start_i += 1
|
||||
end_i -= 1
|
||||
else:
|
||||
|
@ -11,21 +33,34 @@ def is_palindrome(str):
|
|||
return True
|
||||
|
||||
|
||||
# Recursive method
|
||||
def recursive_palindrome(str):
|
||||
if len(str) <= 1:
|
||||
def is_palindrome_recursive(s: str) -> bool:
|
||||
"""
|
||||
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
|
||||
if str[0] == str[len(str) - 1]:
|
||||
return recursive_palindrome(str[1:-1])
|
||||
if s[0] == s[len(s) - 1]:
|
||||
return is_palindrome_recursive(s[1:-1])
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
str = "ama"
|
||||
print(recursive_palindrome(str.lower()))
|
||||
print(is_palindrome(str.lower()))
|
||||
def is_palindrome_slice(s: str) -> bool:
|
||||
"""
|
||||
Return True if s is a palindrome otherwise return False.
|
||||
|
||||
>>> all(is_palindrome_slice(key) is value for key, value in test_data.items())
|
||||
True
|
||||
"""
|
||||
return s == s[::-1]
|
||||
|
||||
|
||||
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…
Reference in New Issue
Block a user