मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें लोअरकेस या अपरकेस अक्षर हैं, हमें उन अक्षरों के साथ बनाए जा सकने वाले सबसे लंबे पैलिंड्रोम की लंबाई का पता लगाना है। अब स्ट्रिंग केस संवेदी है, इसलिए यहां "आ" को पैलिंड्रोम नहीं माना जाता है।
इसलिए, यदि इनपुट "abccccdd" जैसा है, तो आउटपुट 7 होगा, क्योंकि एक सबसे लंबा पैलिंड्रोम जिसे बनाया जा सकता है वह है "dccaccd", जिसकी लंबाई 7.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा एमपी परिभाषित करें
-
प्रत्येक वर्ण के लिए मैं s
. में-
(एमपी[i] 1 से बढ़ाएं)
-
-
मा:=0, सी:=0, उत्तर:=0
-
एमपी में प्रत्येक की-वैल्यू पेयर i के लिए
-
अगर imod 2 का मान 1 के समान है, तो -
-
(मा को 1 से बढ़ाएं)
-
-
c :=c + i का मान
-
-
अगर मा> 0, तो -
-
(मा को 1 से घटाएं)
-
-
Ans :=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