สมมติว่าเรามีสตริงที่ประกอบด้วยอักษรตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ เราต้องหาความยาวของพาลินโดรมที่ยาวที่สุดที่สามารถสร้างด้วยตัวอักษรเหล่านั้นได้ ตอนนี้สตริงคำนึงถึงขนาดตัวพิมพ์ ดังนั้น "Aa" จึงไม่ถือว่าเป็นพาลินโดรมที่นี่
ดังนั้น หากอินพุตเป็นเหมือน "abccccdd" เอาต์พุตจะเป็น 7 เนื่องจากพาลินโดรมที่ยาวที่สุดตัวหนึ่งที่สร้างได้คือ "dccaccd" ซึ่งมีความยาวเท่ากับ 7
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่ง mp mp
-
สำหรับแต่ละอักขระ i ใน s
-
(เพิ่ม mp[i] ขึ้น 1)
-
-
ma :=0, c :=0, ans :=0
-
สำหรับแต่ละคู่คีย์-ค่า i เป็น mp
-
ถ้าค่าของ imod 2 เท่ากับ 1 แล้ว −
-
(เพิ่ม ma ขึ้น 1)
-
-
c :=c + ค่าของ i
-
-
ถ้า ma> 0 แล้ว −
-
(ลดลงมา 1)
-
-
ตอบ :=c - ma
-
กลับมาอีกครั้ง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestPalindrome(string s) { unordered_map<char, int> mp; for (auto i : s) mp[i]++; int ma = 0, c = 0, ans = 0; for (auto i : mp) { if ((i.second) % 2 == 1) ma++; c += i.second; } if (ma > 0) ma--; ans = c - ma; return ans; } }; main(){ Solution ob; cout << (ob.longestPalindrome("abccccdd")); }
อินพุต
"abccccdd"
ผลลัพธ์
7