প্যালিনড্রোম কী?
যে স্ট্রিংটি উল্টো পড়লেও একই থাকে (কেস-ইনসেনসিটিভ, স্পেস/পাঙ্কচুয়েশন বাদ দিয়ে)।
সহজ পদ্ধতি: স্লাইসিং
def is_palindrome(s):
return s == s[::-1]
# টেস্ট
print(is_palindrome("madam")) # True
print(is_palindrome("python")) # False
print(is_palindrome("racecar")) # True
উন্নত সংস্করণ (কেস-ইনসেনসিটিভ, অ্যালফানিউমেরিক মাত্র)
import re
def is_palindrome_advanced(s):
# শুধু অ্যালফানিউমেরিক রেখে লোয়ারকেস
cleaned = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
return cleaned == cleaned[::-1]
# টেস্ট
tests = [
"madam",
"A man, a plan, a canal: Panama",
"racecar",
"hello",
"Was it a car or a cat I saw?"
]
for t in tests:
print(f"'{t}' -> {is_palindrome_advanced(t)}")
আউটপুট
'madam' -> True 'A man, a plan, a canal: Panama' -> True 'racecar' -> True 'hello' -> False 'Was it a car or a cat I saw?' -> True
ইন্টারঅ্যাক্টিভ ভার্সন
def main():
user_input = input("Enter a string: ")
if is_palindrome_advanced(user_input):
print("The string is a palindrome")
else:
print("The string isn't a palindrome")
if __name__ == "__main__":
main()
অ্যালগরিদমিক পদ্ধতি (দুই পয়েন্টার)
def is_palindrome_two_pointer(s):
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
O(n) টাইম, O(1) স্পেস (স্ট্রিং কপি ছাড়া) — বড় স্ট্রিংয়ের জন্য দক্ষ।