ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ค้นหาจำนวนสตริงย่อยทั้งหมดที่เริ่มต้นและสิ้นสุดด้วยสตริงที่กำหนด
เราได้รับหนึ่งสตริงและสองสตริงย่อย เราจำเป็นต้องค้นหาจำนวนสตริงย่อยที่แตกต่างกันซึ่งเริ่มต้นและสิ้นสุดด้วยสองสตริงย่อยที่กำหนด มาดูตัวอย่างกัน
ป้อนข้อมูล
str = "getmesomecoffee" start = "m" end = "e"
ผลผลิต
6
มีสตริงย่อยที่แตกต่างกันทั้งหมด 6 รายการในสตริงที่ระบุ พวกเขาคือ ฉัน เมโซ เมโซเมคคอฟฟี่ เมโซเม่คอฟฟี่ เมคอฟฟี่ เมคอฟฟี่
มาดูขั้นตอนการแก้ปัญหากัน
-
เริ่มต้นสตริง
-
วนซ้ำบน str และค้นหาดัชนีสตริงย่อยเริ่มต้นและสิ้นสุด เก็บไว้ในอาร์เรย์ที่แยกจากกัน
-
เริ่มต้นชุดเพื่อจัดเก็บสตริงย่อยต่างๆ
-
วนซ้ำบน str.
-
ตรวจสอบว่าดัชนีปัจจุบันตรงกับสตริงเริ่มต้นของอาร์เรย์ที่เราสร้างไว้ก่อนหน้านี้หรือไม่
-
หากเราพบดัชนีสตริงเริ่มต้น ให้ค้นหาสตริงสิ้นสุด
-
เพิ่มสตริงทั้งหมดจนกว่าเราจะพบจุดสิ้นสุดของตัวแปร
-
เมื่อเราพบสตริงสิ้นสุด ให้เพิ่มจำนวนสตริงย่อยและเพิ่มสตริงย่อยลงในชุด
-
รีเซ็ตตัวแปรสตริงย่อย
-
-
พิมพ์จำนวนสตริงย่อย
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h>
using namespace std;
int getSubstringsCount(string str, string start, string end) {
int substrings_count = 0, str_length = str.size(), start_length = start.size(), end_length = end.size();
int start_matches_index[str_length] = {0}, end_matches_index[str_length] = {0};
for (int i = 0; i < str_length; i++) {
if (str.substr(i, start_length) == start) {
start_matches_index[i] = 1;
}
if (str.substr(i, end_length) == end) {
end_matches_index[i] = 1;
}
}
set<string> substrings;
string current_substring = "";
for (int i = 0; i < str_length; i++) {
if (start_matches_index[i]) {
for (int j = i; j < str_length; j++) {
if (!end_matches_index[j]) {
current_substring += str[j];
}
if (end_matches_index[j]) {
current_substring += str.substr(j, end_length);
if (substrings.find(current_substring) == substrings.end()) {
substrings_count++;
}
substrings.insert(current_substring);
}
}
current_substring = "";
}
}
return substrings_count;
}
int main() {
string str = "getmesomecoffee";
string start = "m";
string end = "e";
cout << getSubstringsCount(str, start, end) << endl;
return 0;
} ผลลัพธ์
หากคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
6
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น