텍스트 스트림과 단어로 입력이 주어지고 주어진 텍스트 스트림에서 해당 단어의 아나그램 발생 횟수를 찾는 것이 작업입니다. 아나그램은 "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