텍스트 스트림과 단어로 입력이 주어지고 주어진 텍스트 스트림에서 해당 단어의 아나그램 발생 횟수를 찾는 것이 작업입니다. 아나그램은 "New York Times"가 "Monkeys write"로 형성될 수 있는 문장에서 단어의 아나그램과 같이 다른 단어 또는 구로 끝나는 단어의 문자를 재배열하여 생성됩니다.
예
입력 :문자열 문자열-:"workitwrokoffowkr" 단어 ="작업"
출력 :문자열에서 아나그램의 발생 횟수는 다음과 같습니다. 3
설명 :"work"라는 단어에 사용할 수 있는 아나그램은 work, wrok, rowk, owkr 등입니다. 주어진 문자열에서 work에 사용 가능한 아나그램은 work, wrok 및 owkr이므로 개수는 3입니다.
입력 :문자열 문자열-:"expresshycool" 단어 ="젠"
출력 :문자열에서 아나그램 발생 횟수:0
설명 :"zen"이라는 단어에 사용할 수 있는 아나그램은 nez, ezn, enz, zne, nze, zen 등입니다. 주어진 문자열에서 "zen"이라는 단어에 사용할 수 있는 아나그램이 없으므로 개수는 0입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
- countAna 함수에 전달된 문자열(스트림)과 단어(w)가 제공됩니다. (stream,w) 추가 처리를 위해.
- 함수 내부(countAna ) 카운트 플래그가 초기화됩니다.
- i=0에서 i <=(stream.length()) - (w.length())까지 FOR 루프를 시작합니다.
- 함수 내부(countAna ) arrangeAna 함수 호출 (w, stream.substring(i, i + (w.length()))) 단어를 전달하고 부분 문자열을 생성하는 stream.substring(i, i + (w.length())) (단어와 동일한 길이의) ) 스트림에서.
- arrangeAna 함수 내부 문자열이 문자 배열로 변환되고 정렬됩니다.
- (배열.같음 (c1, c2)) 그런 다음 생성된 부분 문자열이 단어와 동일한지 확인하고 그에 따라 응답(true/false)이 전송됩니다.
- 카운트 플래그(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