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