Кажется, я не могу придумать, как решить эту проблему, по какой-то причине я не могу обдумать это.Проблема, которую я пытаюсь решить, заключается в следующем:
Для алгоритма типа решателя головоломок я извлекаю дублирующиеся буквы как подстроку NSString.Допустим, пользователь вводит «RBEEEIOOUUU». Я вытаскиваю только дубликаты из их строки и хочу видеть каждую возможную комбинацию этих дубликатов, не столько позиционно в строке, сколько просто путем изменения количества повторений .. (для этой проблемыпозиция не имеет значения, я ее алфавитирую позже ..)
Итак, учитывая строку EEEOOUUU, я хочу получить набор всех возможных комбинаций строки, основываясь на существенном изменении дубликатов,
Учитывая этот пример, все возможные строки с 3 или Меньше E, 2 или Меньше O и 3 или Меньше U.
Итак, чуть выше моей головы, я бы хотел вернуть
EEEOOUUU (исходная строка) EEEOUUU EEEOOUU EEEOOU
EEOOUUU EEOUUU EEOOUUU EEOUU EEOUU EOOUUUU ....... и так далее ...
В этом мне принадлежит рекурсияодин по какой-то причине, я даже не могу представить себе решение.У меня есть алгоритмы для перестановок наборов букв фиксированной длины, но здесь это не помогает, или, по крайней мере, мой мозг, лишенный сна, не может их применить.
Любая помощь или предложения, которые кто-то чувствует щедрым, могут захотетьпредставь, я буду в долгу перед тобой ..
Для темы разговора вот что-то плохое, что я только что взломал, что, вероятно, все можно выбросить вместо чего-то ... конечно, это предполагает некоторые вызовыя бы позже сказал, что возвращаю только дураки и т. д. Не в восторге от этого как от использования массивов, но это не то, что будет повторяться для множества входных терминов.
//probably the most inefficent way of doign this, sorry for my level of fail.
-(NSMutableArray*) getDuplicatePermutations:(NSMutableArray*)workingArray workingWord:(NSMutableString*)workingWord currentLetter:(NSString*)currentLetter{
NSArray *dupeArray = [self getDuplicateLetters]; //this returns only the letters with an occurrence >1 so in EEEIIOOOT, it returns "E", I", "O"
if (workingWord==nil){workingWord = [[NSMutableString alloc] init];
for (NSString *thisLetter in dupeArray)
{
for (NSString* thisLetterStuff in [self possibleDupePermutationsForLetter:thisLetter theWord:self]){ ////this thing returns NSArray of NSStrings like so "EEE","EE", "E"
workingWord = [workingWord stringByAppendingString:thisLetterStuff];
if ([thisLetter isEqualToString:[dupeArray lastObject]]) { ///do... something.. at the lowest depth...
[workingArray addObject:workingWord];
workingWord = @"";
}
workingArray = [self getDuplicatePermutations:workingArray workingWord:workingWord currentLetter:thisLetter]; //I can haz recursion? No idea where to do it,actually.
}
}
}
return workingArray; ///ostensibly an array filled with crap the looping mess builds
}