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

จัดระเบียบสตริงใหม่ใน C ++


สมมติว่าเรามีสตริง S ให้ตรวจสอบว่าสามารถจัดเรียงตัวอักษรใหม่ได้หรือไม่เพื่อให้อักขระสองตัวที่อยู่ติดกันไม่เหมือนกัน ถ้าเป็นไปได้ ให้แสดงผลใดๆ ที่เป็นไปได้ หากไม่สามารถทำได้ ให้ส่งคืนสตริงว่าง ดังนั้นหากอินพุตเป็นเหมือน “AAB” เอาต์พุตจะเป็น “ABA”

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

  • สร้างคิวลำดับความสำคัญของคู่อักขระจำนวนเต็มที่เรียกว่า pq กำหนดหนึ่งแผนที่ m
  • n :=ขนาดของสตริง
  • เก็บความถี่ของอักขระในแผนที่ m
  • สำหรับคู่คีย์-ค่าแต่ละคู่ p ในหน่วย m
    • แทรก (ส่วนจำนวนเต็มของ p ส่วนอักขระของ p)
  • ans :=สตริงว่าง
  • ในขณะที่ pq ไม่ว่างเปล่า
    • ตั้งค่าหนึ่ง :=คู่บนจาก pq และลบคู่บนสุดจาก pq
    • ถ้า pq ว่างเปล่า
      • ถ้าเป็นจำนวนเต็มของหนึ่ง> 1 ให้คืนค่าสตริงว่าง
      • ans :=ans + ส่วนของตัวละครหนึ่งตัว
      • คืนสินค้า
    • สอง :=คู่บนจาก pq และลบคู่บนสุดจาก pq
    • ans :=ans + ส่วนของตัวละครหนึ่งตัว
    • ans :=ans + ส่วนของอักขระสองตัว
    • เพิ่มส่วนจำนวนเต็มของหนึ่งและสองขึ้น 1
    • ถ้าส่วนจำนวนเต็มของตัวใดตัวหนึ่งไม่ใช่ 0 ให้แทรกส่วนใดส่วนหนึ่งลงใน pq
    • หากส่วนจำนวนเต็มของสองส่วนไม่ใช่ 0 ให้แทรกส่วนหนึ่งลงใน pq
  • คืนสินค้า

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string reorganizeString(string S) {
      priority_queue <pair <int, char>> pq;
      map <char, int> m;
      int n = S.size();
      for(int i = 0; i < n; i++){
         m[S[i]]++;
      }
      map <char, int> :: iterator i = m.begin();
      while(i != m.end()){
         pq.push({i->second, i->first});
         i++;
      }
      string ans = "";
      while(!pq.empty()){
         pair <int, char> one = pq.top();
         pq.pop();
         if(pq.empty()){
            if(one.first > 1)
            return "";
            ans += one.second;
            return ans;
         }
         pair <int, char> two = pq.top();
         pq.pop();
         ans += one.second;
         ans += two.second;
         //cout << ans << endl;
         one.first--;
         two.first--;
         if(one.first)pq.push(one);
         if(two.first)pq.push(two);
      }
      return ans;
   }
};
int main() {
   Solution ob1;
   cout << ob1.reorganizeString("AAB") << endl;
   return 0;
}

อินพุต

S = "AAB"
ob1.reorganizeString("AAB")

ผลลัพธ์

ABA