Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Anagram 부분 문자열 검색을 위한 Java 프로그램

<시간/>

다음은 Java에서 Anagram 하위 문자열 검색의 예입니다.

예시

public class Demo{
   static final int max_val = 256;
   static boolean compare_vals(char my_arr_1[], char my_arr_2[]){
      for (int i = 0; i < max_val; i++)
      if (my_arr_1[i] != my_arr_2[i])
      return false;
      return true;
   }
   static void search_subs(String my_pattern, String my_text){
      int pat_len = my_pattern.length();
      int txt_len = my_text.length();
      char[] count_pat = new char[max_val];
      char[] count_txt = new char[max_val];
      for (int i = 0; i < pat_len; i++){
         (count_pat[my_pattern.charAt(i)])++;
         (count_txt[my_text.charAt(i)])++;
      }
      for (int i = pat_len; i < txt_len; i++){
         if (compare_vals(count_pat, count_txt))
         System.out.println("The element was found at index " + (i - pat_len));
         (count_txt[my_text.charAt(i)])++;
         count_txt[my_text.charAt(i-pat_len)]--;
      }
      if (compare_vals(count_pat, count_txt))
      System.out.println("The element was found at index " + (txt_len - pat_len));
   }
   public static void main(String args[]){
      String my_text = "ABNFGHABNJGH";
      String my_pattern = "NFGH";
      search_subs(my_pattern, my_text);
   }
}

출력

The element was found at index 2

Demo라는 클래스는 두 개의 배열을 취하는 부울 함수와 상수 값을 정의합니다. 상수 값에 도달할 때까지 두 배열을 반복합니다. 비교된 배열의 요소가 같거나 같지 않은지 여부에 따라 true 또는 false를 반환합니다.

또 다른 정적 함수는 텍스트와 텍스트에서 확인해야 하는 패턴을 가져와서 패턴과 문자열을 반복합니다. 패턴과 문자열의 개수가 모두 증가합니다. 다시 'for' 루프가 실행되고 패턴과 텍스트의 카운트가 비교됩니다. 동일하면 인덱스가 표시됩니다. 그렇지 않으면 관련 메시지가 표시됩니다. 메인 클래스에서는 패턴과 텍스트를 정의하고 함수를 호출합니다.