ในบทความนี้ เราได้รับสตริงสองตัว และต้องหาว่ามีซับสตริง (Substring) ของสตริงแรกกี่ตัวที่พบในสตริงที่สอง (ซับสตริงเดียวกันอาจเกิดขึ้นหลายครั้ง) เช่น
Input : string1 = "fogl" string2 = "google" Output : 6 Explanation : ซับสตริงของ string1 ที่อยู่ใน string2 คือ ["o", "g", "l", "og", "gl", "ogl"] Input : string1 = "ajva" string2 = "java" Output : 5 Explanation : ซับสตริงของ string1 ที่อยู่ใน string2 คือ ["a", "j", "v", "a", "va"]
วิธีการแก้ปัญหา
มาอภิบัติวิธีแก้ปัญหานี้: จากตัวอย่าง เราเข้าใจว่าต้องหาซับสตริงทั้งหมดของ string1 แล้วตรวจสอบแต่ละตัวว่าอยู่ใน string2 หรือไม่ ถ้าอยู่เพิ่มตัวนับ และหลังจบการวนลูปตรวจสอบผลลัพธ์ในตัวนับ
โค้ด C++ สำหรับวิธีการข้างต้น
นี่คือโค้ด C++ ที่ใช้แก้ปัญหานี้
ตัวอย่าง
#include<iostream>
#include<string>
using namespace std;
int main() {
string str1 = "ajva";
string str2 = "java";
int count = 0;
int n = str1.length();
for (int i = 0; i < n; i++) {
string str3;
for (int j = i; j < n; j++) {
str3 += str1[j];
if (str2.find(str3) != string::npos)
count++;
}
}
cout << "Number of substrings of one string present in other : " << count;
return 0;
}
ผลลัพธ์
Number of substrings of one string present in other : 5
การเข้าใจโค้ด
ในโค้ดนี้ เรากำหนดค่าสตริงทั้งสองและเริ่มต้นตัวนับที่ 0 วนลูปผ่านสตริงทั้งหมดหาซับสตริงที่เป็นไปได้ของ str1 เก็บไว้ใน str3 ตรวจสอบแต่ละซับสตริงว่าอยู่ใน str2 หรือไม่ ถ้าอยู่เพิ่มตัวนับ 1 แล้วพิมพ์ผลลัพธ์จากตัวแปร count
สรุป
บทความนี้เสนอวิธีง่ายในการหาจำนวนซับสตริงของสตริงหนึ่งที่ปรากฏในอีกสตริงหนึ่ง สามารถเขียนโปรแกรมเดียวกันในภาษาอื่น เช่น C, Java, Python ได้ หวังว่าจะเป็นประโยชน์