เราได้รับสตริงที่มีประโยคภาษาอังกฤษ เป้าหมายคือการหาจำนวนคำในสตริงที่เป็นพาลินโดรม คำ Palindrome คือคำที่เมื่ออ่านตั้งแต่ต้นหรือจบจะมีลำดับตัวอักษรเหมือนกัน หากประโยคคือ “มาดามพูดภาษามาลายาลัมได้ดี” การนับคำพาลินโดรมคือ 2 (มาดามและมาลายาลัม)
หมายเหตุ − คำสามารถมีได้ทั้งตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − str ="แม่ของฉันกับอันนาออกไปตอนเที่ยง";
ผลผลิต − จำนวนคำพาลินโดรมในประโยคคือ − 3
คำอธิบาย − คำ Palindrome ในประโยคข้างบนคือ − Mom, Anna และ Noon (โดยไม่คำนึงถึงตัวพิมพ์ใหญ่)
ป้อนข้อมูล − str=“ฉันอยู่ที่ระดับ 121 ในเกม Racecar”
ผลผลิต − จำนวนคำพาลินโดรมในประโยคคือ − 4
คำอธิบาย − คำ Palindrome ในประโยคด้านบนคือ − I ระดับ 121 Racecar (โดยไม่คำนึงถึงตัวพิมพ์ใหญ่)
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
เราจะนำแต่ละคำหลังเว้นวรรค “ “ ในประโยคแล้วส่งต่อไปยังฟังก์ชัน ฟังก์ชันแปลงอักขระของคำเป็นตัวพิมพ์เล็ก ตอนนี้เริ่มสำรวจจากอักขระตัวแรกของคำและเปรียบเทียบ word[0] กับ word[length-1], word[1] กับ word[length-2] เป็นต้น หากมีความไม่ตรงกันเกิดขึ้น วงแตก อย่างอื่นจะคืนค่าเป็นจริง
-
ใช้สตริงอาร์เรย์ str[] ที่มีประโยค
-
การตรวจสอบฟังก์ชัน (สตริงพิเศษ) รับสตริงและคืนค่า จริง หากสตริงเป็น palindrome อื่นคืนค่าเท็จ
-
คำนวณความยาวของสตริงพิเศษเป็น len=extra.lenght()
-
แปลงสตริงทั้งหมดเป็นตัวพิมพ์เล็กโดยใช้ (extra.begin(), extra.end(), extra.begin(), ::tolower);
-
เริ่มการเดินทางจากดัชนี 0 ของคำจนถึงดัชนี
-
เปรียบเทียบ extra[i]==extra[len-1] หากไม่ตรงกันให้คืนค่าเท็จ มิฉะนั้นคืนค่าเป็นจริง
-
ฟังก์ชัน palindrome(string str, int length) รับประโยคและความยาวและส่งกลับจำนวนคำ palindrome ในนั้น
-
นับเริ่มต้นเป็น 0
-
ใช้สตริงพิเศษพิเศษ ="" เพื่อเลือกและจัดเก็บคำแต่ละคำ
-
เริ่มการเดินทางข้ามประโยคโดยใช้ for loop จาก index 0 ถึง i
-
ใช้อักขระชั่วคราว temp=str.ar(i)
-
ถ้า temp ไม่ใช่ที่ว่างให้เพิ่มเข้าไปเพื่อสร้างคำ
-
หาก temp ไม่ใช่ที่ว่าง ถ้า (ตรวจสอบ (พิเศษ)) คืนค่าจำนวนที่เพิ่มขึ้นจริง
-
Make extra=”” อีกครั้ง
-
การนับครั้งสุดท้ายจะมีจำนวนคำพาลินโดรมทั้งหมด
-
ผลตอบแทนนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
bool check(string extra){
int len = extra.length();
transform(extra.begin(), extra.end(), extra.begin(), ::tolower);
for (int i = 0; i < len; i++,len--){
if (extra.at(i) != extra.at(len - 1)){
return false;
}
}
return true;
}
int palindrome(string str, int length){
int count = 0;
string extra = "";
for (int i = 0; i < length; i++){
char temp = str.at(i);
if (temp != ' '){
extra = extra + temp;
}
else{
if (check(extra))
{ count++; }
extra = "";
}
}
return count;
}
int main(){
string str = "nitin wants nitin for his company named nitin after nitin";
str = str + " ";
int length = str.length();
cout<<"Count of palindrome words in a sentence are: "<<palindrome(str, length)<<endl;
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of palindrome words in a sentence are: 4