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

สร้าง K Palindrome Strings ใน C ++


สมมติว่าเรามีสตริง s และตัวเลข k เราต้องสร้าง k สตริง palindrome ที่ไม่ว่างเปล่าโดยใช้อักขระทั้งหมดใน s ดังนั้นที่นี่เราต้องตรวจสอบว่าเราสามารถใช้อักขระทั้งหมดใน s เพื่อสร้างสตริง k palindrome ได้หรือไม่

ดังนั้น หากอินพุตเป็นเหมือน "จริง" k =4 เอาต์พุตจะเป็น True เนื่องจากวิธีแก้ปัญหาเดียวที่เป็นไปได้คือการใส่อักขระแต่ละตัวในสตริงแยกกัน

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

  • n :=ขนาดของ s

  • ถ้า n

    • คืนค่าเท็จ

  • ถ้า n เท่ากับ k แล้ว −

    • คืนความจริง

  • กำหนดหนึ่งแผนที่

  • สำหรับแต่ละอักขระ c ใน s

    • (เพิ่ม m[c] ขึ้น 1)

  • คี่ :=0

  • สำหรับคีย์-ค่าแต่ละคู่จะมีหน่วยเป็น m -

    • คี่ :=คี่ + (ค่าของมัน AND 1)

  • คืนค่าจริงเมื่อคี่ <=k มิฉะนั้นเป็นเท็จ

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool canConstruct(string s, int k) {
      int n = s.size();
      if (n < k)
         return false;
      if (n == k)
         return true;
      map<char, int> m;
      for (char c : s)
         m[c]++;
      int odd = 0;
      for (auto& it : m) {
         odd += (it.second & 1);
      }
      return odd <= k;
   }
};
main(){
   Solution ob;
   cout << (ob.canConstruct("true",4));
}

อินพุต

"true"

ผลลัพธ์

1