Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सबसे लंबा पैलिंड्रोम


समस्या विवरण

मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें लोअरकेस या अपरकेस अक्षर होते हैं, हमें उन अक्षरों से बनने वाले सबसे लंबे पैलिंड्रोम की लंबाई ज्ञात करनी है। अब स्ट्रिंग केस-सेंसिटिव है, इसलिए "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 का मान
  • यदि 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
  1. - C++ में लॉन्गेस्ट टर्ब्युलेंट सबएरे (Longest Turbulent Subarray)

    एक उपसरणी A[i], A[i+1], ..., A[j] को टर्ब्युलेंट (turbulent) कहा जाता है जब यह इन शर्तों को पूरा करती है: i ≤ k A[k+1], और जब k सम हो तो A[k] < A[k+1]; अन्यथा, i ≤ k A[k+1], और जब k विषम हो तो A[k] < A[k+1]। इसलिए उपसरणी टर्ब्युलेंट होती है यदि उपसरणी में प्रत्येक आसन्न जोड़ी के बीच तुलना चिन्ह

  1. - C++ में प्राइम पालिंड्रोम (Prime Palindrome)

    मान लीजिए हमें N से बड़ा या बराबर सबसे छोटा प्राइम पालिंड्रोम खोजना है। उदाहरण के लिए, यदि N = 13 है, तो सबसे छोटा पालिंड्रोम 101 होगा। समाधान दृष्टिकोण यदि N 8 से 11 के बीच है, तो 11 लौटाएं i को 1 से 99999 तक: विषम लंबाई के पालिंड्रोम बनाएं s := i को स्ट्रिंग में बदलें, r := s को रिवर्स करें num

  1. - C++ में पैलिंड्रोम को तोड़ना

    मान लीजिए हमारे पास एक पैलिंड्रोमिक स्ट्रिंग palindrome है, हमें इसमें ठीक एक अक्षर को किसी भी लोअरकेस अंग्रेजी अक्षर से बदलना है ताकि स्ट्रिंग लेक्सिकोग्राफिक रूप से सबसे छोटी संभव स्ट्रिंग बन जाए जो पैलिंड्रोम न हो। ऐसा करने के बाद हमें अंतिम स्ट्रिंग ढूंढनी है। यदि ऐसा करना संभव न हो, तो खाली स्ट