8 文字の単語のグループ内でアナグラムを見つけるアルゴリズムがあります。事実上、長い単語の文字をアルファベット順に並べ替え、短い単語を 1 つずつ同じようにして、長い単語にそれらが存在するかどうかを確認します。
tower = eortw
two = otw
rot = ort
ここでの問題は、私がort
in eortw
(または塔で腐敗) を探すと、問題なく見つかるということです。腐敗は塔の中にあります。ただし、中央に R があるため、otw
内側eortw
(またはタワー内の 2 つ) ではありません。したがって、2 つがタワーにあるとは考えられません。
これを行うためのより良い方法はありますか?私はObjective-Cでそれをやろうとしています.8文字の単語と通常の単語の両方がNSDictionaries
(通常の形式とアルファベット順の形式で)に格納されています.
私は他のさまざまな投稿を見てきました。StackOverflow のアナグラムがありますが、この特定の問題に対処しているようには見えません。
これが私がこれまでに持っているものです:
- (BOOL) doesEightLetterWord: (NSString* )haystack containWord: (NSString *)needle {
for (int i = 0; i < [needle length] + 1; i++) {
if (!needle) {
NSLog(@"DONE!");
}
NSString *currentCharacter = [needle substringWithRange:NSMakeRange(i, 1)];
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString: currentCharacter];
NSLog(@"Current character is %@", currentCharacter);
if ([haystack rangeOfCharacterFromSet:set].location == NSNotFound) {
NSLog(@"The letter %@ isn't found in the word %@", currentCharacter, haystack);
return FALSE;
} else {
NSLog(@"The letter %@ is found in the word %@", currentCharacter, haystack);
int currentLocation = [haystack rangeOfCharacterFromSet: set].location;
currentLocation++;
NSString *newHaystack = [haystack substringFromIndex: currentLocation];
NSString *newNeedle = [needle substringFromIndex: i + 1];
NSLog(@"newHaystack is %@", newHaystack);
NSLog(@"newNeedle is %@", newNeedle);
}
}
}