我写了下面的方法来确定一个长词是否包含一个较短的单词,并且我传递这些单词的顺序似乎会影响结果。
我注意到,如果我将其absconds
和bassy
提供给它,则会正确报告NO
,但如果我按字母顺序排列并给它abcdnoss
和{{1}它给出了abssy
。我不太清楚为什么会这样 - 有人能发现这个问题吗?
YES
答案 0 :(得分:0)
- (BOOL) does: (NSString* ) longWord contain: (NSString *) shortWord
{
return ([longWord rangeOfString:shortWord].location != NSNotFound);
}
答案 1 :(得分:0)
您的算法存在的问题是此行不起作用:
longWord = [longWord substringFromIndex: [longWord rangeOfCharacterFromSet: set].location+1];
如果您搜索的第一个字母位于长词的末尾,则长词将变为空字符串,并且您将跳出循环为YES。
我会使用不同的算法,就像这样。我认为更容易看到发生了什么,因此不容易出错:
- (BOOL) does: (NSString* ) longWord contain: (NSString *) shortWord {
NSMutableString *longer = [longWord mutableCopy];
for (int i = 0; i<shortWord.length; i++) {
NSString *letter = [shortWord substringWithRange:NSMakeRange(i, 1)];
NSRange letterRange = [longer rangeOfString:letter];
if (letterRange.location != NSNotFound) {
[longer deleteCharactersInRange:letterRange];
}else{
return NO;
}
}
return YES;
}