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

นับจำนวนการปรากฏของ Anagram ใน C++

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

ตัวอย่าง

Input: String string = "workitwrokoffowkr" word = "work"

Output: จำนวนการปรากฏของ anagram ในสตริงคือ: 3

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

Input: String string = "expresshycool" word = "Zen"

Output: จำนวนการปรากฏของ anagram ในสตริงคือ: 0

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

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

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

หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้

ผลลัพธ์

Count of occurrences of anagram in the string are: 3