สมมติว่าเรามีสตริงที่มีความยาว n ประกอบด้วยตัวอักษรพิมพ์ใหญ่เท่านั้น เราต้องหาจำนวนซับสตริงที่ตัวอักษรเกิดขึ้นตามลำดับตัวอักษร ขนาดขั้นต่ำของซับสตริงคือ 2 ดังนั้นถ้าสตริงเป็น "REFJHLMNBV" จำนวนซับสตริงคือ 2 คือ "EF" และ "MN"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- ตรวจสอบว่า str[i] + 1 เท่ากับ str[i+1] หรือไม่ หากใช่ ให้เพิ่มผลลัพธ์ขึ้น 1 และวนลูปสตริงต่อจนกว่าจะพบตัวอักษรถัดไปที่อยู่นอกลำดับตัวอักษร มิฉะนั้นทำต่อไป
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
int countSubstr(string main_str) {
int res = 0;
int n = main_str.size();
for (int i = 0; i < n - 1; i++) {
if (main_str[i] + 1 == main_str[i + 1]) {
res++;
while (main_str[i] + 1 == main_str[i + 1]) {
i++;
}
}
}
return res;
}
int main() {
string str = "REFJHLMNBV";
cout << "Number of substrings: " << countSubstr(str);
}
ผลลัพธ์
Number of substrings: 2