Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนตัวอักษรที่ต้องต่อท้ายขั้นต่ำเพื่อทำให้สตริงเป็นพาลินโดรมใน C++


ข้อความโจทย์

กำหนดสตริง หาตัวอักษรน้อยที่สุดที่ต้องต่อท้ายเพื่อทำให้สตริงเป็นพาลินโดรม

ตัวอย่าง

ถ้าสตริงคือ abcac เราสามารถทำให้เป็นพาลินโดรมได้โดยการต่อท้าย 2 ตัวอักษรที่ไฮไลท์ คือ abcacba

อัลกอริทึม

  • ตรวจสอบว่าสตริงเป็นพาลินโดรมอยู่แล้วหรือไม่ ถ้าใช่ ไม่ต้องต่อท้ายอะไร
  • ทีละตัว นำตัวอักษรออกจากสตริง และตรวจสอบว่าสตริงที่เหลือเป็นพาลินโดรมหรือไม่
  • ทำซ้ำขั้นตอนข้างต้นจนกว่าสตริงจะกลายเป็นพาลินโดรม
  • คืนค่าจำนวนตัวอักษรที่นำออกไปจนถึงตอนนั้นเป็นคำตอบสุดท้าย

ตัวอย่าง

#include <iostream> #include <cstring> using namespace std; bool isPalindrome(char *str) {     int n = strlen(str);     if (n == 1) {       return true;     }     int start = 0, end = n - 1;     while (start < end) {       if (str[start] != str[end]) {           return false;       }       ++start;       --end;     }     return true; } int requiredAppends(char *str) {     if (isPalindrome(str)) {       return 0;     }     return 1 + requiredAppends(str + 1); } int main() {     char *str = "abcac";     cout << "Characters to be appended = " << requiredAppends(str) << endl;     return 0; }

ผลลัพธ์

เมื่อคอมไพล์และรันโปรแกรมข้างต้น จะได้ผลลัพธ์ดังนี้

Characters to be appended = 2