เราได้รับสตริง งานคือการนับตัวอักษรที่มีเพื่อนบ้านทั้งสองข้าง (ซ้ายและขวา) เป็นตัวอักษรเดียวกัน โดยตัวอักษรแรกและตัวสุดท้ายจะนับเสมอเพราะมีเพื่อนบ้านเพียงข้างเดียว
ตัวอย่าง
Input − string str = "poiot" Output − count is 3
คำอธิบาย − p (ตัวแรก), t (ตัวสุดท้าย), i (เพื่อนบ้านซ้ายขวาเป็น o ทั้งคู่) รวม 3 ตัว
Input − string str = "nitihig" Output − count is 4
คำอธิบาย − n (ตัวแรก), g (ตัวสุดท้าย), t (เพื่อนบ้าน i,i), h (เพื่อนบ้าน i,i) รวม 4 ตัว
แนวทางการแก้ปัญหา
- ถ้าความยาวสตริง ≤ 2 คืนค่าความยาวเลย (ทุกตัวนับได้)
- เริ่มต้นนับ = 2 (ตัวแรกและตัวสุดท้าย)
- วนลูป i จาก 1 ถึง len-2
- ถ้า str[i-1] == str[i+1] ให้เพิ่มตัวนับ
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
int countChar(string st) {
int size = st.length();
if (size <= 2) return size;
int result = 2;
for (int i = 1; i < size - 1; i++) {
if (st[i-1] == st[i+1]) result++;
}
return result;
}
int main() {
string st = "poiot";
cout << "count is " << countChar(st);
return 0;
}
ผลลัพธ์
count is 3
บทความนี้สาธิตการนับตัวอักษรในสตริงที่มีเพื่อนบ้านซ้ายและขวาเหมือนกัน รวมถึงตัวแรกและตัวสุดท้ายที่นับเสมอ โดยใช้การตรวจสอบดัชนี i-1 และ i+1