สมมติว่าเรามีสตริงที่มีความยาว n ประกอบด้วยอักษรตัวพิมพ์ใหญ่เท่านั้น เราต้องหาจำนวนสตริงย่อยที่มีอักขระเรียงตามลำดับตัวอักษร ขนาดต่ำสุดของสตริงย่อยจะเป็น 2 ดังนั้นหากสตริงมีลักษณะดังนี้:“REFJHLMNBV” และจำนวนสตริงย่อยคือ 2 จะเป็น “EF” และ “MN”
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ตรวจสอบว่า str[i] + 1 เหมือนกับ str[i+1] หรือไม่ ถ้าใช่ ให้เพิ่มผลลัพธ์เป็น 1 และวนซ้ำสตริงจนถึงอักขระถัดไปซึ่งไม่เรียงตามลำดับตัวอักษร มิฉะนั้นให้ดำเนินการต่อ
ตัวอย่าง
#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