我们获得了作为文本流和单词的输入,任务是找出给定文本流中单词的字谜出现的次数。字谜是通过重新排列单词的字母而产生的,而单词最终是一个不同的单词或短语,就像语句“纽约时报”中的单词字谜一样,可以形成“猴子写”。
输入:字符串string-:“ workitwrokoffowkr”,单词=“ work”
输出:字符串中的字谜出现次数为:3
说明:“ work”一词的可能字谜是work,wrok,rowk,owkr等。在给定的字符串中,work的可用字谜是work,wrok和owkr,因此计数为3。
输入:字符串string-:“ expresshycool”一词=“ Zen”
输出:字符串中的字谜出现次数为:0
说明:单词“ zen”的可能字谜为nez,ezn,enz,zne,nze,zen等。在给定的字符串中,单词“ zen”没有可用字谜,因此计数为0。
我们给了一个字符,string(stream)并将word(w)其传递给函数countAna(stream,w)进行进一步处理。
在函数内部(countAna)初始化了一个计数标志
从i = 0到i <=()-()启动一个FOR循环。stream.length()w.length()
在函数(countAna)内调用函数rangeAna(w,stream.substring(i,i +()))传递单词和stream.substring(i,i +()),生成子串(长度等于单词) )。w.length()w.length()
在函数rangaAna中,字符串将转换为字符数组并进行排序
(阵列。等于(C1,C2))然后检查是否所生成的子串是等于字和响应(真/假)被相应地发送。
countAna()如果响应为true,则将计数标记(位于内)加1。
然后在该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