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