首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Anagram / partial anagram检测算法发现错误答案

Anagram / partial anagram检测算法发现错误答案
EN

Stack Overflow用户
提问于 2012-11-20 05:14:53
回答 2查看 474关注 0票数 0

我写了下面的方法来找出一个长单词是否包含一个短单词,并且我传递字母的顺序似乎会影响结果。

我注意到,如果我给它输入abscondsbassy,它会正确地报告NO,但如果我按字母顺序排列,给它abcdnossabssy,它就会给出YES。我不太确定为什么会这样--有人能发现问题所在吗?

代码语言:javascript
复制
- (BOOL) does: (NSString* ) longWord contain: (NSString *) shortWord {
    while([longWord length] > 0 && [shortWord length] > 0) {
        NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString: [shortWord substringToIndex: 1]];
        if ([longWord rangeOfCharacterFromSet: set].location == NSNotFound) {
            return NO;
        }
        longWord = [longWord substringFromIndex: [longWord rangeOfCharacterFromSet: set].location+1];
        shortWord = [shortWord substringFromIndex: 1];  
    }
    return YES;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-20 10:18:59

你的算法的问题是这一行不起作用:

代码语言:javascript
复制
longWord = [longWord substringFromIndex: [longWord rangeOfCharacterFromSet: set].location+1];

如果您搜索的第一个字母位于长词的末尾,那么长词就会变成一个空字符串,您就会跳出循环,选择YES。

我会使用不同的算法,就像这样。我认为它更容易看到正在发生的事情,因此不太容易出错:

代码语言:javascript
复制
- (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;
}
票数 0
EN

Stack Overflow用户

发布于 2012-11-20 05:25:43

代码语言:javascript
复制
 - (BOOL) does: (NSString* ) longWord contain: (NSString *) shortWord 
 {
      return ([longWord rangeOfString:shortWord].location != NSNotFound);   
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13462367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档