Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาคำนำหน้าทั่วไปที่ยาวที่สุดระหว่างสองสตริงหลังจากทำการสลับกับสตริงที่สองใน C++


สมมติว่าเรามีสองสตริง 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