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