ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ค้นหาจำนวนสตริงย่อยทั้งหมดที่เริ่มต้นและสิ้นสุดด้วยสตริงที่กำหนด
เราได้รับหนึ่งสตริงและสองสตริงย่อย เราจำเป็นต้องค้นหาจำนวนสตริงย่อยที่แตกต่างกันซึ่งเริ่มต้นและสิ้นสุดด้วยสองสตริงย่อยที่กำหนด มาดูตัวอย่างกัน
ป้อนข้อมูล
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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น