เราได้รับสตริง str[] เป็นอินพุต เป้าหมายคือนับจำนวนคำจาก str[] ที่มีความยาวเท่ากับ str[] และมีตำแหน่งตัวอักษรที่ตัวอักษรตัวที่ i ถูกแทนที่ด้วยตัวอักษรที่ตำแหน่ง (i-1), i, หรือ (i+1)
สำหรับตัวอักษรแรก การแทนที่จะมาจากตำแหน่ง i หรือ i+1
สำหรับตัวอักษรสุดท้าย การแทนที่จะมาจากตำแหน่ง i-1 หรือ i
มาดูตัวอย่างเพื่อเข้าใจ
อินพุต − str[] = "TPP"
เอาต์พุต − จำนวนคำที่ตัวอักษรตัวที่ i เป็นตัวอักษรตัวที่ i-1, i, หรือ i+1 ของคำที่กำหนด คือ 4
คำอธิบาย
แทนที่ T ด้วย T (i) หรือ P ตัวแรก (i+1) = TPP, PPP แทนที่ P ตัวแรก ด้วย T (i-1), P (i), หรือ P (i+1) = TTP, TPP, TPP แทนที่ P ตัวที่สอง ด้วย P (i-1) หรือ P (i) = TPP, TPP ชุดการแทนที่ที่ไม่ซ้ำกัน: TPP, PPP, TTP, PTP
อินพุต − str = "aaa"
เอาต์พุต − จำนวนคำที่ตัวอักษรตัวที่ i เป็นตัวอักษรตัวที่ i-1, i, หรือ i+1 ของคำที่กำหนด คือ 1
คำอธิบาย
แทนที่ a ด้วย a (i) หรือ a ตัวที่สอง (i+1) = aaa, aaa แทนที่ a ตัวที่สอง ด้วย a (i-1), a (i), หรือ a (i+1) = aaa, aaa, aaa แทนที่ a ตัวที่สาม ด้วย a (i-1) หรือ a (i) = aaa, aaa ชุดการแทนที่ที่ไม่ซ้ำกัน: aaa
แนวทางที่ใช้ในโปรแกรม
เรารู้ว่าสำหรับตัวอักษรแต่ละตัวมี 3 ความเป็นไปได้ หากตัวอักษร (i-1), i, (i+1) ต่างกันทั้งหมด จะมี 3 ตัวเลือก หากมีสองตัวเหมือนกัน 2 ตัวเลือก หากทั้งสามตัวเหมือนกัน 1 ตัวเลือก
ดังนั้นเราจะเดินทางผ่านสตริงและตรวจสอบความไม่ซ้ำกัน แล้วคูณด้วย 3, 2, หรือ 1 ตามตัวอักษร สำหรับตัวอักษรแรกและสุดท้าย ตรวจสอบความไม่ซ้ำกันและคูณด้วย 2 หรือ 1 แบบเดียวกัน
- รับสตริง
str[]เป็นอาเรย์ตัวอักษร - ฟังก์ชัน
total(char str[], int length)รับสตริงและคืนจำนวนคำที่ตรงตามเงื่อนไข - กำหนด
countเริ่มต้นเป็น 1 (คำในstr[]เอง) - ถ้าความยาวเป็น 1 คืน 1
- ตรวจสอบตัวอักษรแรกที่ดัชนี 0 ถ้าเท่ากับตัวที่สอง
str[0]==str[1]คูณcountด้วย 1 มิฉะนั้นคูณ 2 - วนลูปจากตัวอักษรที่ 2 ถึงตัวก่อนสุดท้าย ดัชนี
i=1ถึงi<length-1 - สำหรับตัวอักษรที่ดัชนี
iตรวจสอบว่าstr[i]เท่ากับstr[i-1]หรือstr[i+1]ถ้าใช่ คูณcountด้วย 1 - ถ้ามีสองตัวเหมือนกัน คูณ
countด้วย 2 - มิฉะนั้น คูณ
countด้วย 3 - สำหรับตัวอักษรสุดท้าย ตรวจสอบ
str[i-1]==str[i]ถ้าใช่ คูณ 1 มิฉะนั้น คูณ 2 - คืนค่า
countเป็นผลลัพธ์
ตัวอย่างโค้ด C++
#include<bits/stdc++.h>
using namespace std;
int total(char str[], int length){
int count = 1;
if (length == 1){
return count;
}
if (str[0] == str[1]){
count = count * 1;
} else {
count = count * 2;
}
for (int j=1; j<length-1; j++){
if (str[j] == str[j-1] && str[j] == str[j+1]){
count = count * 1;
} else if (str[j] == str[j-1]){
count = count * 2;
} else if(str[j] == str[j+1]){
count = count * 2;
} else if(str[j-1] == str[j+1]){
count = count * 2;
} else {
count = count * 3;
}
}
if (str[length - 1] == str[length - 2]){
count = count * 1;
} else {
count = count * 2;
}
return count;
}
int main(){
char str[] = "TPP";
int length = strlen(str);
cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: "<<total(str, length) << endl;
return 0;
}
เอาต์พุต
หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4