C++ 中查找字谜出现的次数


给定一个文本流和一个单词作为输入,任务是找出在给定文本流中该单词的字谜出现的次数。字谜是通过重新排列单词中的字母形成的不同的单词或短语,例如“New York Times”中的单词的字谜可以形成“Monkeys write”。

例如

输入:字符串: “workitwrokoffowkr” 单词 = “work”

输出:字符串中字谜出现的次数为:3

解释:单词“work”的可能字谜有 work、wrok、rowk、owkr 等。在给定的字符串中,“work”的可用字谜是 work、wrok 和 owkr,因此计数为 3。

输入:字符串: “expresshycool” 单词 = “Zen”

输出:字符串中字谜出现的次数为:0

解释:单词“zen”的可能字谜有 nez、ezn、enz、zne、nze、zen 等。在给定的字符串中,单词“zen”没有可用字谜,因此计数为 0。

下面程序中使用的方案如下

  • 给定一个字符字符串(流)和一个单词(w),该单词传递到函数 countAna(stream,w) 中进行进一步处理。
  • 在函数 (countAna) 内部初始化一个计数标志。
  • 从 i=0 开始一个 FOR 循环,直到 i <= (stream.length()) - (w.length()) 。
  • 在函数 (countAna) 内部,调用函数 arrangeAna(w, stream.substring(i, i + (w.length()))),传递单词和 stream.substring(i, i + (w.length())),它从流中生成子字符串(长度等于单词)。
  • 在函数 arrangeAna 内部,字符串被转换为字符数组并进行排序。
  • (Arrays.equals(c1, c2)) 然后检查生成的子字符串是否等于单词,并相应地发送响应(true/false)。
  • 如果响应为真,则计数标志(在 countAna() 内部)递增。
  • 然后在 main() 方法中捕获响应并打印输出。

示例

import java.io.*;
import java.util.*;

public class testClass {
   static boolean arrangeAna(String s1, String s2) {
      char[] c1 = s1.toCharArray();
      char[] c2 = s2.toCharArray();
      Arrays.sort(c1);
      Arrays.sort(c2);
      if (Arrays.equals(c1, c2)) {
         return true;
      } else {
         return false;
      }
   }
   static int countAna(String stream, String w) {
      int count = 0;
      for (int i = 0; i <= (stream.length()) - (w.length()); i++) {
         if (arrangeAna(w, stream.substring(i, i + (w.length())))) {
            count++;
         }
      }
      return count;
   }

   public static void main(String args[]) {
      Scanner scan = new Scanner(System.in);
      String stream = scan.next(); //workitwrokoffowkr
      String w = scan.next(); //work
      System.out.print(countAna(stream, w));
   }
}

如果运行以上代码,它将生成以下输出:

输出

Count of occurrences of anagram in the string are: 3

更新于: 2021年1月29日

350 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告