เราได้รับอินพุตเป็นสตรีมข้อความและคำหนึ่งคำ ภารกิจคือหาจำนวนการปรากฏของ 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