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

การนับจำนวนสตริงที่กำหนดในอาร์เรย์อักขระ 2 มิติใน C++


ปัญหาต่อไปนี้คือตัวอย่างปริศนาอักษรไขว้ของหนังสือพิมพ์รายวัน ในที่นี้เราได้รับอาร์เรย์อักขระ 2 มิติและคำสั่งปัญหาคือการค้นหาคำที่กำหนดจากเขาวงกตอาร์เรย์อักขระ 2 มิติ อัลกอริธึมการค้นหารวมถึงการค้นหาอักขระแต่ละตัวจาก บนลงล่าง ,ขวาไปซ้าย และในทางกลับกันแต่ไม่ใช่แนวทแยง

ให้เราเข้าใจด้วยตัวอย่าง

อินพุต- คำสตริง-LAYS

สตริง 2D[ ] - { "LOAPYS", "KAYSOT", "LAYSST", "MLVAYS", "LAYSAA", "LAOYLS" };

ผลผลิต- จำนวนสตริงที่กำหนดในอาร์เรย์อักขระ 2 มิติ:7

คำอธิบาย - เนื่องจากเราได้รับอาร์เรย์สตริงของคำและจากคำเหล่านั้น เราจึงต้องค้นหาคำว่า "LAYS" ซึ่งสามารถค้นหาได้ในทุกทิศทาง เช่น บน-ล่าง ขวา-ซ้าย ล่าง-บน และซ้าย-ขวา ค่าสถานะตัวนับในโค้ดจะเพิ่มขึ้นทุกครั้งที่พบสตริงการค้นหาที่กำหนด และการนับจะถูกส่งคืนเมื่อสิ้นสุดผลลัพธ์ ในตัวอย่าง เราจะเห็นได้ว่า LAYS เกิดขึ้น 7 ครั้ง นั่นคือ

1->L โอเอYS -LAYS-> ซ้ายไปขวา

2 ->ย่า โอ -LAYS(ขวาไปซ้าย)

3->วาง T-LAYS(ซ้ายไปขวา)

4->ML วีAYS- เลย์(ซ้ายไปขวา)

5->เลย์ซ่า A-LAYS(ซ้ายไปขวา)

6->แอลเอ OYLS -LAYS(ซ้ายไปขวา)

7->(ล่างขึ้นบน) ใน เลย์สีแดง

อินพุต- คำสตริง - CAMP

สตริง 2D[ ] - { "BLOOKS", "BPOOLK", "KOHPKB", "BOLKOK", "LKIOOB", "LAHYBL" }

ผลลัพธ์- จำนวนสตริงที่กำหนดในอาร์เรย์อักขระ 2 มิติ:0

คำอธิบาย-: เนื่องจากเราได้รับอาร์เรย์สตริงของคำและจากคำเหล่านั้น เราจึงต้องค้นหาคำว่า "LAYS" ซึ่งสามารถค้นหาได้ในทุกทิศทาง เช่น บน-ล่าง ขวา-ซ้าย ล่าง-บน และซ้าย-ขวา ค่าสถานะตัวนับในโค้ดจะเพิ่มขึ้นทุกครั้งที่พบสตริงการค้นหาที่กำหนด และการนับจะถูกส่งคืนเมื่อสิ้นสุดผลลัพธ์ ในตัวอย่าง เราจะเห็นว่า BOOK ถูกสร้างขึ้น 0 ครั้ง

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราได้รับสตริง (คำ) และอาร์เรย์สตริงซึ่งพร้อมกับตัวแปรยูทิลิตี้บางตัวจะถูกส่งไปยัง findString() สำหรับการประมวลผลต่อไป
  • อักขระในเมทริกซ์จะถูกข้ามไปและจะมีการหยิบอักขระขึ้นมาเพื่อเริ่มสตริง
  • สำหรับอักขระที่ถูกหยิบขึ้นมา เราจะค้นหาสตริงที่กำหนดซ้ำในทุกทิศทางที่เป็นไปได้ตามอัลกอริทึม
  • หากพบว่าตรงกัน ตัวนับจะเพิ่มขึ้น
  • หลังจากที่เราเสร็จสิ้นด้วยอักขระเริ่มต้นตัวแรกแล้ว กระบวนการจะทำซ้ำสำหรับอักขระตัวถัดไป
  • ผลรวมของการนับจะถูกคำนวณด้วยการจับคู่ที่สอดคล้องกัน
  • จากนั้น คำตอบสุดท้ายจะถูกบันทึก และผลลัพธ์จะถูกพิมพ์ออกมา

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int utilitySearch(string word, int r, int c, string arr[], int maxR, int maxC, int index) {
   int count = 0;
   if (r >= 0 && r <= maxR && c >= 0) {
      if (c <= maxC && word[index] == arr[r][c]) {
         char res = word[index];
         index = index + 1;
         arr[r][c] = 0;
         if (word[index] == 0) {
            count = 1;
         } else {
            count = count + utilitySearch(word, r, c + 1, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r, c - 1, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r + 1, c, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r - 1, c, arr, maxR, maxC, index);
         }
         arr[r][c] = res;
      }
   }
   return count;
}

int findString(string word, int r, int c, string str[], int countR, int countC) {
   int count = 0;
   for (int i = 0; i < countR; ++i) {
      for (int j = 0; j < countC; ++j) {
         count = count + utilitySearch(word, i, j, str, countR - 1, countC - 1, 0);
      }
   }
   return count;
}

int main() {
      string word = "FLOOD";
      string inp[] = {"FPLIOKOD","FLOODYUT","YFLOODPU","FMLOSODT","FILPOYOD", FLOOOODE " };
         string str[(sizeof(inp) / sizeof( * inp))];
         for (int i = 0; i < (sizeof(inp) / sizeof( * inp)); ++i) {
            str[i] = inp[i];
         }
         cout << "Count of number of given string in 2D character array: " << findString(word, 0, 0, str, (sizeof(inp) / sizeof( * inp)), str[0].size());
         return 0;
}

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

ผลลัพธ์

Count of number of given string in 2D character array: 6