Я новичок в этом форуме и хотел задать вопрос. Я видел нескольких людей, задающих вопросы по анаграммам, но мой вопрос связан с этим конкретным алгоритмом. Я видел этот алгоритм, который использует метод рекурсии для генерации анаграмм, но часть этого алгоритма мне не очень понятна. Я хотел обратиться за помощью с точки зрения того, почему этот конкретный шаг сделан. Этот алгоритм изложено в разделе «Опрос по программированию». Вот алгоритм:Anagram Algorithm Уточнение
Если вы мимо последней позиции
печать строки и возврата
В противном случае
Для каждой буквы в строке ввода
Если оно отмечено, перейдите к следующей букве
Else разместить письмо в текущей позиции
- Марк письмо используется
- переставить оставшиеся буквы уставившись в текущей позиции + 1
- Отметить письмо как неиспользуемый
Вот этот код для этого же:
void permute(String str){
int length = str.length();
boolean[] used = new boolean[length];
StringBuffer out = new StringBuffer();
char[] in = str.toCharArray();
doPermute(in, out, used, length, 0);
}
void doPermute(char[] in, StringBuffer out, boolean[] used, int length,
int level){
if (level == length){
System.out.println(out.toString());
return;
}
for (int i = 0; i<length; i++){
if (used[i]) continue;
out.append(in[i]);
used[i] = true;
doPermute(in, out, used, length, level + 1);
used[i] = false;
out.setLength(out.length() - 1); // why are we reducing the size of out??
}
}
В пояснении кода указано, что при возврате рекурсивного вызова последний символ просто отбрасывается путем уменьшения размера буфера. Я не могу понять, почему мы бросаем последнего персонажа? Может ли кто-нибудь помочь. Благодаря!!!!!
Вау, этот алгоритм намного сложнее, чем то, что я привык видеть для проверки анаграммы. Я привык видеть «разделить оба слова на буквы и отсортировать их, если результаты совпадают, эти две являются анаграммами». –
Я думаю, что это алгоритм генерации анаграммы, а не проверка :) – cerkiewny