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

更新於: 2021年1月29日

350 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告