ในบทความนี้ เราจะได้รับสองสตริง และเราจำเป็นต้องค้นหาจำนวนสตริงย่อยของสตริงที่ 1 ที่สามารถพบได้ในสตริงที่ 2 (สตริงย่อยที่แน่นอนสามารถเกิดขึ้นได้หลายครั้ง) ตัวอย่างเช่น
Input : string1 = “fogl” string2 = “google” Output : 6 Explanation : substrings of string1 present in string2 are [ “o”, “g”, “l”, “og”, “gl”, “ogl” ]. Input : string1 = “ajva” string2 = “java” Output : 5 Explanation : substrings of string1 present in string2 are [ “a”, “j”, “v”, “a”, “va” ].
แนวทางในการหาทางออก
มาพูดคุยกันว่าเราจะสามารถแก้ปัญหานี้ในการค้นหาสตริงย่อยหลายๆ ตัวที่อยู่ในสตริงอื่นได้อย่างไร ดูตัวอย่าง; เราเข้าใจว่าก่อนอื่นเราต้องดูสตริงย่อยทั้งหมดของ string1 แล้วเราต้องตรวจสอบแต่ละสตริงย่อยว่ามีอยู่ในสตริงอื่นหรือไม่ ถ้าใช่ให้เพิ่มตัวนับและหลังจากดำเนินการทั้งสตริงให้ตรวจสอบผลลัพธ์ที่เก็บไว้ในตัวนับ .
โค้ด C++ สำหรับแนวทางด้านบน
นี่คือไวยากรณ์ C++ ที่เราสามารถใช้เป็นอินพุตเพื่อแก้ปัญหาที่กำหนดได้ -
ตัวอย่าง
#include<iostream>
#include<string>
using namespace std;
int main() {
string str1 = "ajva";
string str2 = "java";
int count = 0;// counter to store result
int n = str1.length();
for (int i = 0; i < n; i++) {
string str3; // string3 is initialised to store all substrings of string1
for (int j = i; j < n; j++) {
str3 += str1[j];
// checking whether substring present in another string or not
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 จากนั้นเราตรวจสอบแต่ละสตริงย่อยของ str1 ไม่ว่าจะอยู่ใน str2 หรือไม่ก็ตาม ถ้าใช่ ให้เพิ่มตัวนับขึ้น 1 และในที่สุดเราจะพิมพ์ผลลัพธ์ที่เก็บไว้ในตัวแปรตัวนับ
บทสรุป
บทความนี้พบวิธีแก้ปัญหาง่ายๆ ในการค้นหาจำนวนสตริงย่อยของสตริงหนึ่งที่มีอยู่ในสตริงอื่น เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์