สมมติว่าเรามีสองสตริง str1 และ str2 ค้นหาคำนำหน้าทั่วไปที่ยาวที่สุดระหว่างคำเหล่านี้หลังจากดำเนินการเป็นศูนย์หรือมากกว่าในสตริงที่สอง ในแต่ละการดำเนินการ เราสามารถสลับตัวอักษรสองตัวใดก็ได้ ดังนั้นถ้า str1 ="HERE", str2 ="THERE" ผลลัพธ์จะเป็น 4 สตริงที่สองสามารถสร้าง "HERET" ได้โดยเพียงแค่สลับอักขระ ดังนั้นคำนำหน้าที่ยาวที่สุดคือความยาว 4
อย่างที่เราทราบดีว่าเราสามารถสลับกับ str2 เท่านั้น และความยาวของเมทริกซ์ควรขยายให้ใหญ่สุด แนวคิดก็คือให้ข้ามผ่าน str1 และตรวจสอบว่าความถี่ของอักขระปัจจุบันใน str1 เท่ากันหรือน้อยกว่าใน str2 หรือไม่ ถ้าใช่ ให้เลื่อนไปข้างหน้าในสตริง a มิฉะนั้น ให้แยกและพิมพ์ความยาวของส่วนของสตริง str1 ซึ่งตรงกับอักขระในสตริง str2
ตัวอย่าง
#include <iostream> using namespace std; void longestPrefix(string str1, string str2) { int frequency[26]={0}; int a = str1.length(); int b = str2.length(); for (int i=0 ;i<b ; i++) { frequency[str2[i] - 97] += 1; } int c = 0; for (int i=0 ;i<a ; i++) { if (frequency[str1[i] - 97] > 0){ c += 1; frequency[str1[i] - 97] -= 1; } else break; } cout<<"Length of longest common prefix: " << c; } int main() { string str1="here", str2 = "there"; longestPrefix(str1, str2); }
ผลลัพธ์
Length of longest common prefix: 4