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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP