确定String是否具有所有唯一字符

时间:2013-01-26 19:48:32

标签: objective-c nsstring unique

(例如,“assdf”和“aash”将被视为错误。)

2 个答案:

答案 0 :(得分:5)

我认为你向后陈述了问题,但是为了测试NSString中的每个字符是否都是唯一的,我认为以下内容应该有效。可能有一些有趣的unicode边缘情况不起作用,其中相同的字形显示为不同的代码点。

@interface NSString(_uniqueChars)
-(BOOL) isEveryCharacterUnique;
@end

@implementation NSString(_uniqueChars)
-(BOOL) isEveryCharacterUnique
{
    NSMutableSet *set = [NSMutableSet setWithCapacity:self.length];
    for ( NSUInteger i = 0; i < self.length; ++i )
    {
        unichar c = [self characterAtIndex:i];
        [set addObject:[NSNumber numberWithUnsignedShort:c]];
    }

    return (set.count == self.length);
}
@end

答案 1 :(得分:1)

我也在尝试NSCharacterSet但没有结果。这可能是另一个解决方案,但+1更好的解决方案。

   - (BOOL) isUnique: (NSString *) aString{

        int len = (int)aString.length;
        for(int i=0;i<len;i++)
        {
            NSString *tmp = [aString substringWithRange:NSMakeRange(i, 1)];
            for(int j=i+1;j<len;j++)
            {
                if([[aString substringWithRange:NSMakeRange(j, 1)]isEqualToString: tmp])
                {
                    return NO;
                }
            }
        }
        return YES;
   }