Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số lần xuất hiện của anagram trong chuỗi bằng C++

Cho một luồng văn bản (text stream) và một từ (word), nhiệm vụ là tìm số lần xuất hiện của các anagram của từ trong luồng văn bản. Anagram được tạo bằng cách sắp xếp lại các chữ cái của một từ thành từ hoặc cụm từ khác, ví dụ anagram của "New York Times" có thể là "Monkeys write".

Ví dụ

Đầu vào: Chuỗi "workitwrokoffowkr", từ "work"

Đầu ra: Số lần xuất hiện anagram: 3

Giải thích: Các anagram của "work": work, wrok, rowk, owkr, v.v. Trong chuỗi cho trước có: work, wrok, owkr → đếm = 3.

Đầu vào: Chuỗi "expresshycool", từ "Zen"

Đầu ra: Số lần xuất hiện anagram: 0

Giải thích: Không có anagram nào của "zen" trong chuỗi.

Phương pháp sử dụng

  • Cho chuỗi ký tự (stream) và từ (w) truyền vào hàm countAna(stream, w).
  • Trong hàm countAna khởi tạo biến đếm.
  • Vòng lặp FOR từ i = 0 đến i <= stream.length() - w.length().
  • Gọi hàm arrangeAna(w, stream.substring(i, i + w.length())) với từ và chuỗi con độ dài bằng từ.
  • Trong arrangeAna: chuyển chuỗi thành mảng ký tự, sắp xếp, so sánh bằng Arrays.equals(c1, c2).
  • Nếu khớp tăng biến đếm.
  • In kết quả.

Ví dụ mã nguồn (Java)

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); 
        return Arrays.equals(c1, c2); 
    } 
    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)); 
    } 
}

Chạy mã trên cho kết quả:

Kết quả

Count of occurrences of anagram in the string are: 3