Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Palindrome ที่ยาวที่สุดใน C++


สมมติว่าเรามีสตริงที่ประกอบด้วยอักษรตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ เราต้องหาความยาวของพาลินโดรมที่ยาวที่สุดที่สามารถสร้างด้วยตัวอักษรเหล่านั้นได้ ตอนนี้สตริงคำนึงถึงขนาดตัวพิมพ์ ดังนั้น "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