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

โปรแกรม C สำหรับค้นหาสตริงย่อยแอนนาแกรม


ในปัญหานี้ เราจะได้รับข้อความขนาด n หนึ่งข้อความและรูปแบบขนาด m อีก 2 สตริง งานของเราคือการสร้างโปรแกรมสำหรับการค้นหาสตริงย่อยของ Anagram

ที่นี่ เราต้องค้นหาการเกิดของรูปแบบและการเรียงสับเปลี่ยนทั้งหมด (แอนนาแกรม) ในข้อความ

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

text = “xyztrwqyzxfg” pattern = “xyz”

ผลลัพธ์

Found at index 0
Found at index 7

ในการแก้ปัญหานี้ เราจะต้องใช้อัลกอริทึมที่คล้ายกับ อัลกอริทึมของ Rabin Karp ซึ่งใช้ตรวจสอบการเกิดแอนนาแกรมโดยการเพิ่มค่า ASCII ของอักขระทั้งหมดภายใต้โมดูโลของตัวเลข แล้วใช้หน้าต่างชุดคุณลักษณะและจับคู่ผลรวม

การแก้ปัญหาจะต้องมีสองอาร์เรย์ที่จะเก็บความถี่ของอักขระในหน้าต่างของข้อความตลอดจนรูปแบบที่ตรงกัน จากนั้นเราจะเลื่อนหน้าต่างทีละหน้าต่างและจับคู่ความถี่อักขระสำหรับหญิงม่ายแต่ละคนและพิมพ์รูปแบบที่ตรงกัน

โปรแกรมสำหรับค้นหาสตริงย่อยแอนนาแกรม

//โปรแกรมสำหรับค้นหาสตริงย่อยแอนนาแกรม

ตัวอย่าง

#include <cstring>
#include <iostream>
#define MAX 256
using namespace std;
bool matchPattern(char arr1[], char arr2[]){
   for (int i = 0; i < MAX; i++)
   if (arr1[i] != arr2[i])
      return false;
   return true;
}
void anagramSearch(char* pattern, char* text){
   int M = strlen(pattern);
   int N = strlen(text);
   char patternArray[MAX] = { 0 }, textArray[MAX] = { 0 };
   for (int i = 0; i < M; i++) {
      (patternArray[pattern[i]])++;
      (textArray[text[i]])++;
   }
   for (int i = M; i < N; i++) {
      if (matchPattern(patternArray, textArray))
         printf("\nPattern found at index value : %d", (i-M));
      (textArray[text[i]])++;
      textArray[text[i - M]]--;
   }
   if (matchPattern(patternArray, textArray))
   printf("\nPattern found at index value: %d", (N-M));
}
int main() {
   char text[] = "xyztrwqyzxfg";
   char pattern[] = "xyz";
   printf("Searching Anagram pattern in the string ");
   anagramSearch(pattern, text);
   return 0;
}

ผลลัพธ์

Searching Anagram pattern in the string
Pattern found at index value: 0
Pattern found at index value: 7