C++ 中最長的迴文串


假設我們有一個由小寫或大寫字母組成的字串,我們需要找出可以用這些字母構建的最長迴文串的長度。現在,字串區分大小寫,因此“Aa”在這裡不被認為是迴文串。

因此,如果輸入像“abccccdd”這樣,那麼輸出將是 7,因為可以構建的最長的迴文串之一是“dccaccd”,其長度為 7。

為了解決這個問題,我們將按以下步驟進行 −

  • 定義一個對映圖 mp

  • 對於 s 中的每個字元 i

    • (將 mp[i] 加 1)

  • ma := 0, c := 0, ans := 0

  • 對於 mp 中的每個鍵值對 i

    • 如果 imod 2 的值為 1,則 −

      • (將 ma 加 1)

    • c := c + i 的值

  • 如果 ma > 0,則 −

    • (將 ma 減 1)

  • ans := c - ma

  • 返回 ans

示例

讓我們看看以下實現,以獲得更好的理解 −

 即時演示

#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

更新於: 10-6-2020

2K+ 人瀏覽過

立即開始您的 職業生涯

透過完成課程獲得認證

立即開始
廣告