โจทย์
ตัดสินใจว่า text เป็นพาลินโดรมหรือไม่ โดยพิจารณาเฉพาะตัวอักษรและตัวเลข และไม่สนใจตัวพิมพ์เล็ก-ใหญ่
ให้เขียนฟังก์ชัน is_palindrome(text)
อินพุต
text: ข้อความที่ต้องการตรวจสอบ (ตัวอักษร ASCII)
เอาต์พุต
คืนค่า true หากเป็นพาลินโดรม มิฉะนั้นคืนค่า false
เงื่อนไข
0 ≤ ความยาว ≤ 10,000
ตัวอย่าง
อินพุต:
text = "Racecar"
ผลลัพธ์ที่คาดหวัง:
expected = True
อินพุต:
std::string text = "Racecar";
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
อินพุต:
string text = "Racecar";
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
คำอธิบาย
เมื่อแปลงเป็นตัวพิมพ์เล็ก "racecar" อ่านได้เหมือนกันทั้งสองทาง
อินพุต:
text = "hello"
ผลลัพธ์ที่คาดหวัง:
expected = False
อินพุต:
std::string text = "hello";
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
อินพุต:
string text = "hello";
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
คำอธิบาย
"hello" เมื่อกลับด้านจะได้ "olleh" ซึ่งไม่เหมือนเดิม
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
ละเว้นทุกอย่างที่ไม่ใช่ตัวอักษรหรือตัวเลขก่อนเทียบ
คำใบ้ 2
ขยับเข้าหากันจากทั้งสองด้าน แล้วเทียบแบบไม่สนตัวพิมพ์เล็กใหญ่
คำใบ้ 3
ข้ามเครื่องหมายวรรคตอนและช่องว่างให้ดี เพื่อไม่ให้รบกวนพาลินโดรมที่ถูกต้อง
ความซับซ้อนที่คาดหวัง
เวลา O(n), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน