📜  门| GATE-CS-2016(Set 2)|问题2(1)

📅  最后修改于: 2023-12-03 14:58:31.106000             🧑  作者: Mango

题目介绍

本题出自 GATE-CS-2016(Set 2) 的第二题。该题为一道字符串操作题,要求实现一个特定的函数。

题目描述

给出一个字符串 S 和一个字符串数组 V,要实现一个函数 countStrings(S, V),其中 S 和 V 的长度都不超过 1000。函数需要找出 S 中有多少个子串等于 V 中的某个字符串。需要注意的是,同一个子串不应被重复计数。子串可以重叠。

传入的参数 S 和 V 均为小写字母,且其中的空格将被忽略。

输入格式

输入由两行组成:

  • 第一行包含一个字符串 S。
  • 第二行包含一个由空格分隔的字符串列表 V。
输出格式

输出一个整数,表示 S 中子串等于 V 中某个字符串的个数。

样例输入
banana
ana n a
样例输出
4
题目分析

对于这道题,我们可以使用暴力枚举的方法,逐一检查 S 中的子串是否为 V 中的字符串之一。

具体来说,我们可以先将所有的空格在 V 中去掉,然后分别遍历 S 中所有长度大于等于 V 中最长字符串长度的子串,若该子串在 V 中,则将计数器加一并将该子串从 V 中移除。

代码片段
Python

下面给出一份 Python 代码片段实现上述算法:

def countStrings(S, V):
    V = [s.replace(" ", "") for s in V] # 去掉空格
    count = 0
    for i in range(len(S)):
        for j in range(i+1, len(S)+1):
            if S[i:j] in V:
                count += 1
                V.remove(S[i:j])
    return count
Java

下面给出一份 Java 代码片段实现上述算法:

public static int countStrings(String S, String[] V) {
    List<String> V_new = new ArrayList<>();
    for (String s : V) { // 去掉空格
        V_new.add(s.replaceAll(" ", ""));
    }
    int count = 0;
    for (int i = 0; i < S.length(); i++) {
        for (int j = i+1; j <= S.length(); j++) {
            if (V_new.contains(S.substring(i, j))) {
                count++;
                V_new.remove(S.substring(i, j));
            }
        }
    }
    return count;
}

以上就是本题的相关介绍和代码实现,希望对您有所帮助!