📌  相关文章
📜  2D字符数组中给定字符串的数量计数

📅  最后修改于: 2021-04-26 06:09:02             🧑  作者: Mango

给定一个二维字符数组和一个字符串,我们需要在二维字符数组中找到给定的字符串,以便各个字符可以从左到右,从右到左,从上到下或从下到上显示。

例子:

Input : a ={
            {D,D,D,G,D,D},
            {B,B,D,E,B,S},
            {B,S,K,E,B,K},
            {D,D,D,D,D,E},
            {D,D,D,D,D,E},
            {D,D,D,D,D,G}
           }
        str= "GEEKS"
Output :2

Input : a = {
            {B,B,M,B,B,B},
            {C,B,A,B,B,B},
            {I,B,G,B,B,B},
            {G,B,I,B,B,B},
            {A,B,C,B,B,B},
            {M,C,I,G,A,M}
            }
        str= "MAGIC"

Output :4

我们讨论了一个更简单的问题,以查找单词是否存在于矩阵中。
要计算所有事件,我们遵循简单的蛮力方法。遍历矩阵中的每个字符,并采取每个字符字符串的开始被发现,尝试所有可能的方向进行搜索。只要找到一个单词,就增加计数,遍历矩阵后,计数值将是字符串在字符矩阵中的存在次数。

算法 :
1-由字符导线矩阵字符和采取一个字符作为字符串开始
2-对于每个字符,递归地在所有四个方向上找到字符串
3-如果找到一个字符串,我们增加计数
4-当我们以一个字符作为开始完成时,我们对下一个字符重复相同的过程
5-计算每个字符的计数总和
6-最终计数将是答案

C++14
// C++ code for finding count
// of string in a given 2D
// character array.
#include 
using namespace std;
 
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))
 
// utility function to search
// complete string from any
// given index of 2d char array
int internalSearch(string needle, int row,
                   int col, string hay[],
                   int row_max, int col_max, int xx)
{
    int found = 0;
 
    if (row >= 0 && row <= row_max && col >= 0 &&
        col <= col_max && needle[xx] == hay[row][col])
    {
        char match = needle[xx];
        xx += 1;
 
        hay[row][col] = 0;
 
        if (needle[xx] == 0)
        {
            found = 1;
        }
        else
        {
 
            // through Backtrack searching
            // in every directions
            found += internalSearch(needle, row,
                                    col + 1, hay,
                                    row_max, col_max,xx);
            found += internalSearch(needle, row, col - 1,
                                    hay, row_max, col_max,xx);
            found += internalSearch(needle, row + 1, col,
                                    hay, row_max, col_max,xx);
            found += internalSearch(needle, row - 1, col,
                                    hay, row_max, col_max,xx);
        }
        hay[row][col] = match;
    }
    return found;
}
 
// Function to search the string in 2d array
int searchString(string needle, int row, int col,
                  string str[], int row_count,
                                int col_count)
{
    int found = 0;
    int r, c;
 
    for (r = 0; r < row_count; ++r)
    {
        for (c = 0; c < col_count; ++c)
        {
            found += internalSearch(needle, r, c, str,
                                    row_count - 1,
                                    col_count - 1, 0);
        }
    }
    return found;
}
 
// Driver code
int main()
{
    string needle = "MAGIC";
    string input[] = { "BBABBM",
                       "CBMBBA",
                       "IBABBG",
                       "GOZBBI",
                       "ABBBBC",
                       "MCIGAM" };
    string str[ARRAY_SIZE(input)];
    int i;
    for (i = 0; i < ARRAY_SIZE(input); ++i)
    {
        str[i] = input[i];
    }
 
    cout << "count: " << searchString(needle, 0, 0, str,
                                      ARRAY_SIZE(str),
                                      str[0].size()) << endl;
    return 0;
}
 
 
// This code is contributed by SHUBHAMSINGH8410


C
// C code for finding count
// of string in a given 2D
// character array.
#include 
#include 
#include 
 
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))
 
// utility function to search
// complete string from any
// given index of 2d char array
int internalSearch(char *needle, int row,
                   int col, char **hay,
                   int row_max, int col_max)
{
    int found = 0;
 
    if (row >= 0 && row <= row_max && col >= 0 &&
        col <= col_max && *needle == hay[row][col])
        {
             
        char match = *needle++;
 
        hay[row][col] = 0;
 
        if (*needle == 0) {
            found = 1;
        } else {
 
            // through Backtrack searching
            // in every directions
            found += internalSearch(needle, row,
                                    col+1, hay,
                                    row_max, col_max);
            found += internalSearch(needle, row, col-1,
                                    hay, row_max, col_max);
            found += internalSearch(needle, row+1, col,
                                    hay, row_max, col_max);
            found += internalSearch(needle, row-1, col,
                                    hay, row_max, col_max);
        }
 
        hay[row][col] = match;
    }
 
    return found;
}
 
// Function to search the string in 2d array
int searchString(char *needle, int row, int col,
                 char **str, int row_count, int col_count)
{
    int found = 0;
    int r, c;
 
    for (r = 0; r < row_count; ++r) {
        for (c = 0; c < col_count; ++c) {
            found += internalSearch(needle, r, c, str,
                            row_count - 1, col_count - 1);
        }
    }
 
    return found;
}
 
// Driver code
int main(void){
 
    char needle[] = "MAGIC";
    char *input[] = {
        "BBABBM",
        "CBMBBA",
        "IBABBG",
        "GOZBBI",
        "ABBBBC",
        "MCIGAM"
    };
    char *str[ARRAY_SIZE(input)];
    int i;
    for (i = 0; i < ARRAY_SIZE(input); ++i) {
        str[i] = malloc(strlen(input[i]));
        strcpy(str[i], input[i]);
    }
 
    printf("count: %d\n", searchString(needle, 0, 0,
              str, ARRAY_SIZE(str), strlen(str[0])));
 
    return 0;
}


Java
// Java code for finding count
// of string in a given 2D
// character array.
import java.util.*;
 
class GFG{
     
// Utility function to search
// complete string from any
// given index of 2d char array
static int internalSearch(String needle, int row,
                          int col, String hay[],
                          int row_max, int col_max,
                          int xx)
{
    int found = 0;
     
    if (row >= 0 && row <= row_max && col >= 0 &&
        col <= col_max && xx < needle.length() &&
        needle.charAt(xx) == hay[row].charAt(col))
    {
        char match = needle.charAt(xx);
        xx += 1;
 
        hay[row] = hay[row].substring(0, col) + "0" +
                   hay[row].substring(col + 1);
 
        if (xx == needle.length())
        {
            found = 1;
        }
        else
        {
             
            // Through Backtrack searching
            // in every directions
            found += internalSearch(needle, row,
                                    col + 1, hay,
                                    row_max, col_max,xx);
            found += internalSearch(needle, row, col - 1,
                                    hay, row_max, col_max,xx);
            found += internalSearch(needle, row + 1, col,
                                    hay, row_max, col_max,xx);
            found += internalSearch(needle, row - 1, col,
                                    hay, row_max, col_max,xx);
        }
         
        hay[row] = hay[row].substring(0, col) +
           match + hay[row].substring(col + 1);
    }
    return found;
}
 
// Function to search the string in 2d array
static int searchString(String needle, int row, int col,
                        String str[], int row_count,
                                      int col_count)
{
    int found = 0;
    int r, c;
 
    for(r = 0; r < row_count; ++r)
    {
        for(c = 0; c < col_count; ++c)
        {
            found += internalSearch(needle, r, c, str,
                                    row_count - 1,
                                    col_count - 1, 0);
        }
    }
    return found;
}
 
// Driver code
public static void main(String args[])
{
    String needle = "MAGIC";
    String input[] = { "BBABBM", "CBMBBA",
                       "IBABBG", "GOZBBI",
                       "ABBBBC", "MCIGAM" };
    String str[] = new String[input.length];
    int i;
    for(i = 0; i < input.length; ++i)
    {
        str[i] = input[i];
    }
 
    System.out.println("count: " +
              searchString(needle, 0, 0, str,
                           str.length,
                           str[0].length()));
}
}
 
// This code is contributed by adityapande88


Python3
# Python code for finding count
# of string in a given 2D
# character array.
 
# utility function to search
# complete string from any
# given index of 2d array
def internalSearch(ii, needle, row, col, hay,
                    row_max, col_max):
     
    found = 0
    if (row >= 0 and row <= row_max and
        col >= 0 and col <= col_max and
        needle[ii] == hay[row][col]):
        match = needle[ii]
        ii += 1
        hay[row][col] = 0
        if (ii == len(needle)):
            found = 1
        else:
             
            # through Backtrack searching
            # in every directions
            found += internalSearch(ii, needle, row,
                               col + 1, hay, row_max, col_max)
            found += internalSearch(ii, needle, row,
                               col - 1, hay, row_max, col_max)
            found += internalSearch(ii, needle, row + 1,
                               col, hay, row_max, col_max)
            found += internalSearch(ii, needle, row - 1,
                               col, hay, row_max, col_max)
        hay[row][col] = match
    return found
 
# Function to search the string in 2d array
def searchString(needle, row, col,strr,
                row_count, col_count):
    found = 0
    for r in range(row_count):
        for c in range(col_count):
            found += internalSearch(0, needle, r, c,
                        strr, row_count - 1, col_count - 1)
             
    return found
 
# Driver code
 
needle = "MAGIC"
inputt = ["BBABBM","CBMBBA","IBABBG",
            "GOZBBI","ABBBBC","MCIGAM"]
 
strr = [0] * len(inputt)
 
for i in range(len(inputt)):
    strr[i] = list(inputt[i])
     
print("count: ", searchString(needle, 0, 0, strr,
                        len(strr), len(strr[0])))
 
# This code is contributed by SHUBHAMSINGH10


输出:

count: 3