คำชี้แจงปัญหา
ให้สตริง S เราต้องหาอักขระขั้นต่ำที่เราสามารถลบออกเพื่อทำการเรียงสับเปลี่ยนของสตริง S เป็นพาลินโดรม
ตัวอย่าง
หาก str =“abcdba” เราจะลบอักขระ 1 ตัวออก เช่น 'c'or 'd'
อัลกอริทึม
<ก่อน>1. palindrome มีสองประเภทคือ palindrome ที่มีความยาวเท่ากันและ palindromes ที่มีความยาวคี่2 เราสามารถสรุปได้ว่า palindrome ที่มีความยาวคู่ต้องมีอักขระทุกตัวที่เกิดขึ้นเป็นจำนวนคู่ 3 palindrome คี่ต้องมีอักขระทุกตัวที่เกิดขึ้นเป็นจำนวนเท่า ๆ กันยกเว้นอักขระหนึ่งตัวที่เกิดขึ้นเป็นเลขคี่ 4 ตรวจสอบความถี่ของอักขระทุกตัวและนับจำนวนอักขระที่เกิดขึ้นเป็นจำนวนคี่ ผลที่ได้คือจำนวนอักขระความถี่คี่ทั้งหมดลบ 1ตัวอย่าง
#include#define MAX 26 โดยใช้เนมสเปซ std;int minCharactersRemoved (สตริง str) { int hash[MAX] ={0}; สำหรับ (int i =0; str[i]; ++i) { hash[str[i] - 'a']++; } int cnt =0; สำหรับ (int i =0; i เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้
ผลลัพธ์
อักขระขั้นต่ำที่จะลบ =1