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

ทำลาย Palindrome ใน C ++


สมมติว่าเรามีสตริงพาลินโดรม palindrome เราต้องแทนที่อักขระตัวเดียวด้วยตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กใด ๆ เพื่อให้สตริงกลายเป็นสตริงที่เล็กที่สุดเกี่ยวกับศัพท์เฉพาะที่ไม่ใช่ palindrome หลังจากทำอย่างนั้นแล้ว เราก็ต้องหาเส้นสุดท้าย หากไม่มีวิธีการดังกล่าว ให้ส่งคืนสตริงว่าง ดังนั้นหากอินพุตเป็นเหมือน “abccba” เอาต์พุตจะเป็น “aaccba”

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • เปลี่ยน :=เท็จ

  • หากขนาดของสตริงเท่ากับ 1 ให้คืนค่าสตริงว่าง

  • ผม :=0 และ j :=ความยาวของ s – 1

  • leftA :=จริงและ rightA :=จริง

  • ในขณะที่ฉัน

    • ถ้า s[i] ไม่ใช่ 'a' ให้ตั้งค่า s[i] เป็น 'a' แล้วคืนค่า s

    • เพิ่ม i 1 และลด j โดย 1

  • s[ขนาด s - 1] :='b'

  • ผลตอบแทน s

ตัวอย่าง (C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string breakPalindrome(string s) {
      bool changed = false;
      if(s.size() == 1)return "";
      int i = 0, j = s.size() - 1;
      bool leftA = true;
      bool rightA= true;
      while(i < j){
         if(s[i] != 'a'){
            s[i] = 'a';
            return s;
         }
         i++;
         j--;
      }
      s[s.size() - 1] = 'b';
      return s;
   }
};
main(){
   Solution ob;
   cout << (ob.breakPalindrome("abccba"));
}

อินพุต

"abccba"

ผลลัพธ์

aaccba