เราได้รับสตริง str เป้าหมายคือการนับสตริงย่อยทั้งหมดของ str ที่เป็น palindromes พิเศษและมีความยาวมากกว่า 1 palindromes พิเศษคือสตริงที่มีอักขระเดียวกันทั้งหมดหรือเฉพาะอักขระตรงกลางเท่านั้นที่ต่างกัน ตัวอย่างเช่น หากสตริงคือ “baabaa” ดังนั้น palindromes พิเศษที่เป็นสตริงย่อยของต้นฉบับคือ “aa”, “aabaa”, “aba”, “aa”
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − str=”abccdcdf”
ผลผลิต − จำนวนพาลินโดรมพิเศษในสตริงคือ − 3
คำอธิบาย − สตริงย่อยที่เป็นพาลินโดรมพิเศษคือ − “cc”, “cdc”, “dcd”
ป้อนข้อมูล − str=”baabaab”
ผลผลิต − จำนวนพาลินโดรมพิเศษในสตริงคือ − 4
คำอธิบาย − สตริงย่อยที่เป็นพาลินโดรมพิเศษคือ − “aa”, “aabaa”, “aba”, “aa”
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
สร้างชุดตัวอักษรและคำนวณความยาว ส่งข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป
-
ประกาศตัวแปรชั่วคราว นับ และฉัน และตั้งค่าให้เป็น 0
-
สร้างอาร์เรย์ของขนาดของสตริงและเริ่มต้นด้วย 0
-
เริ่ม WHILE จนถึง i น้อยกว่าความยาวของสตริง
-
ภายใน while ให้ตั้งค่าตัวแปรเป็นผลรวมเป็น 1 และตัวแปร j เป็น i + 1
-
เริ่มอีกในขณะที่ str[i] =str[j] และ j น้อยกว่าความยาวของสตริง
-
ในระหว่างนี้ ให้เพิ่มผลรวม 1 และ j ขึ้น 1
-
ตั้งค่าการนับเป็นจำนวน + ( ทั้งหมด * (รวม + 1) / 2, arr[i] เป็นยอดทั้งหมด และ i เป็น j
-
เริ่มวนซ้ำ FOR จาก j ถึง 1 จนถึงความยาวของสตริง
-
ตรวจสอบว่า str[j] =str[j-1] แล้วตั้งค่า arr[j] เป็น arr[j-1]
-
ตั้งค่าตัวแปร temp เป็น str[j-1] และตรวจสอบว่า j> 0 AND j <น้อยกว่าความยาวของสตริงหรือไม่ AND temp =str[j+1] AND sr[j]!=temp จากนั้นให้นับเป็น count + มิน(arr[j-1], arr[j+1])
-
ตั้งค่าการนับ นับ - ความยาวของสตริง
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int count_palindromes(string str, int len){
int count = 0, i = 0;
int arr[len] = { 0 };
while (i < len){
int total = 1;
int j = i + 1;
while (str[i] == str[j] && j < len){
total++;
j++;
}
count += (total * (total + 1) / 2);
arr[i] = total;
i = j;
}
for (int j = 1; j < len; j++){
if (str[j] == str[j - 1]){
arr[j] = arr[j - 1];
}
int temp = str[j - 1];
if (j > 0 && j < (len - 1) && (temp == str[j + 1] && str[j] != temp)){
count += min(arr[j-1], arr[j+1]);
}
}
count = count - len;
return count;
}
int main(){
string str = "bcbaba";
int len = str.length();
cout<<"Count of special palindromes in a String are: "<< count_palindromes(str, len);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of special palindromes in a String are: 3