Dưới đây là ví dụ Anagram Substring Search trong Java:
Ví dụ
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("Phần tử tìm thấy tại chỉ số: " + (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("Phần tử tìm thấy tại chỉ số: " + (txt_len - pat_len));
}
public static void main(String args[]){
String my_text = "ABNFGHABNJGH";
String my_pattern = "NFGH";
search_subs(my_pattern, my_text);
}
}
Kết quả
Phần tử tìm thấy tại chỉ số: 2
Lớp Demo định nghĩa hằng số và hàm Boolean nhận hai mảng. Duyệt cả hai mảng đến hằng số. Trả về true/false tùy phần tử so sánh bằng nhau hay không.
Hàm tĩnh khác nhận văn bản và mẫu cần kiểm tra, duyệt mẫu và chuỗi. Đếm cả mẫu và chuỗi tăng. Lại vòng for so sánh đếm mẫu và văn bản. Nếu bằng, chỉ số hiển thị. Ngược lại, thông báo. Trong main, mẫu và văn bản định nghĩa và hàm gọi.