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