【问题标题】:Determing if a NSString has all unique characters确定字符串是否具有所有唯一字符
【发布时间】:2013-01-26 19:48:32
【问题描述】:

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

【问题讨论】:

  • “独特的字符”是什么意思?这两个字符串都至少有一个重复字符,并且它们也彼此共享字符。
  • 你想检查你的字符串是否有唯一字符???
  • 你的例子肯定是假的吗?一个有 2 个 ss,另一个有 2 个 a s。我只会给你投反对票,但我今天已经用完了我所有的选票……算你幸运吧。
  • 对不起,我编辑了,我的意思是他们是假的

标签: objective-c nsstring unique


【解决方案1】:

我认为您倒退了问题,但是要测试 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

【讨论】:

  • 我试图用 NSCharacterSet 来做,可惜它没有计数属性。但无事可做,+1 以获得有效的解决方案。
【解决方案2】:

我也在尝试 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;
   }    

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2015-04-30
    • 2015-05-17
    • 2013-06-25
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多