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