如何在iOS SDK中删除两个字符串中的常用字母?

时间:2013-07-02 13:16:10

标签: objective-c nsstring

如何删除两个字符串中的重复字母并使用剩余的唯一字母生成新字符串?

例如:

String 1= optimusprime;
String 2= dejathoras;
combined string : optimusprimedejathoras;

现在删除重复的字母,

新字符串应为:optimusredjah,

问题是,新字符串中只应有一种字母,不会重复(正如您在示例中所见)

2 个答案:

答案 0 :(得分:3)

您可以按照this answer中的相似步骤进行操作 你之前的问题:

NSString *string1 = @"optimusprime";
NSString *string2 = @"dejathoras";

// Combine strings:
NSString *combined = [string1 stringByAppendingString:string2];

// Now remove duplicate characters:
NSMutableString *result = [combined mutableCopy];
[result enumerateSubstringsInRange:NSMakeRange(0, [result length])
               options:NSStringEnumerationByComposedCharacterSequences
            usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                // Check if current character already occurred at an earlier location:
                NSRange previousRange = [result rangeOfString:substring
                                      options:0
                                    range:NSMakeRange(0, substringRange.location)];
                if (previousRange.location != NSNotFound) {
                    [result deleteCharactersInRange:substringRange];
                }
            }];
NSLog(@"%@", result);

输出:optimusredjah

编辑:上述解决方案无法很好地扩展。存储重复的字符 在@ waf的答案或中建议的字典中,可能更好:

NSMutableString *result = [combined mutableCopy];
NSMutableSet *chars = [NSMutableSet set];
[result enumerateSubstringsInRange:NSMakeRange(0, [result length])
               options:NSStringEnumerationByComposedCharacterSequences
            usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                if ([chars containsObject:substring]) {
                    [result deleteCharactersInRange:substringRange];
                } else {
                    [chars addObject:substring];
                }

            }];

答案 1 :(得分:0)

一种方法可能是遍历每个字符串中的所有字符并跟踪字典中的计数。然后转到每个键并将键一次打印到字符串。不确定订单是否重要。

如果订单很重要,那么每当你“记录”一个字符串时,在你追加到一个最初为空的字符串之前就没有看到它。

伪代码:jointString =第一个+第二个。对于关节中的每个char,如果NSMutableDict!有,则插入char,并且finalString = finalString + thisChar。