Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับการเกิดของแอนนาแกรมใน C ++


เราได้รับอินพุตเป็นสตรีมข้อความและคำ และภารกิจคือการค้นหาจำนวนการเกิดแอนนาแกรมของคำในสตรีมข้อความที่กำหนด Anagrams ถูกสร้างขึ้นโดยการจัดเรียงตัวอักษรจากคำที่ลงเอยด้วยคำหรือวลีที่ต่างกัน เช่น anagrams ของคำในข้อความ "New York Times" สามารถจัดเป็น "Monkeys write" ได้

ตัวอย่าง

ป้อนข้อมูล :String string-:“workitwrokoffowkr” word =“work”

ผลผลิต :จำนวนการเกิดแอนนาแกรมในสตริงคือ:3

คำอธิบาย :แอนนาแกรมที่เป็นไปได้สำหรับคำว่า "งาน" ได้แก่ work,wrok, rowk, owkr เป็นต้น ในสตริงที่กำหนด anagrams ที่ใช้ได้สำหรับการทำงานคือ work, wrok และ owkr ดังนั้นการนับคือ 3

ป้อนข้อมูล :String string-:“expresshycool” word =“Zen”

ผลผลิต :จำนวนการเกิดแอนนาแกรมในสตริงคือ:0

คำอธิบาย :แอนนาแกรมที่เป็นไปได้สำหรับคำว่า "zen" คือ nez, ezn, enz, zne, nze, zen เป็นต้น ในสตริงที่กำหนด ไม่มีแอนนาแกรมสำหรับคำว่า "zen" ดังนั้นการนับจึงเป็น 0

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราได้รับสตริงอักขระ (สตรีม) และ word(w) ซึ่งส่งผ่านในฟังก์ชัน countAna (สตรีม,w) เพื่อดำเนินการต่อไป
  • ภายในฟังก์ชัน(countAna ) ตั้งค่าสถานะการนับแล้ว
  • เริ่มวน FOR จาก i=0 ถึง i <=(stream.length()) - (w.length()) .
  • ภายในฟังก์ชัน(countAna ) เรียกใช้ฟังก์ชัน arrangeAna (w, stream.substring(i, i + (w.length()))) ส่งผ่านคำและ stream.substring(i, i + (w.length())) ซึ่งสร้างสตริงย่อย (ความยาวเท่ากับคำ ) จากสตรีม
  • ภายในฟังก์ชัน arrangeAna สตริงจะถูกแปลงเป็นอาร์เรย์อักขระและจัดเรียง
  • (อาร์เรย์เท่ากับ (c1, c2)) จากนั้นตรวจสอบว่าสตริงย่อยที่สร้างขึ้นนั้นเท่ากับคำนั้นหรือไม่ และคำตอบ (จริง/เท็จ) จะถูกส่งไปตามนั้น
  • ค่าสถานะการนับ (ภายใน 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