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
广告