สมมติว่าเรามีสตริง 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