समस्या विवरण
मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें लोअरकेस या अपरकेस अक्षर होते हैं, हमें उन अक्षरों से बनने वाले सबसे लंबे पैलिंड्रोम की लंबाई ज्ञात करनी है। अब स्ट्रिंग केस-सेंसिटिव है, इसलिए "Aa" को यहां पैलिंड्रोम नहीं माना जाता है।
उदाहरण
यदि इनपुट है: "abccccdd", तो आउटपुट होगा 7, क्योंकि एक सबसे लंबा पैलिंड्रोम जो बनाया जा सकता है वह है "dccaccd", जिसकी लंबाई 7 है।
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:
- एक मैप mp परिभाषित करें
- s में प्रत्येक वर्ण i के लिए:
- mp[i] को 1 से बढ़ाएं
- ma := 0, c := 0, ans := 0
- mp में प्रत्येक कुंजी-मान जोड़ी i के लिए:
- यदि i का मान % 2 == 1:
- ma को 1 से बढ़ाएं
- c := c + i का मान
- यदि i का मान % 2 == 1:
- यदि ma > 0:
- ma को 1 से घटाएं
- ans := c - ma
- ans लौटाएं
C++ कार्यान्वयन
#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;
}
};
int main() {
Solution ob;
cout << (ob.longestPalindrome("abccccdd"));
return 0;
}
इनपुट
"abccccdd"
आउटपुट
7