【问题标题】:How to remove common letters in two Strings in iOS SDK? [duplicate]如何在 iOS SDK 中删除两个字符串中的常用字母? [复制]
【发布时间】:2013-07-02 13:16:10
【问题描述】:

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

例如:

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

现在通过删除重复的字母,

新字符串应该是:optimusredjah,

问题是,新字符串中应该只有一种类型的字母,而不是重复的(如您在示例中看到的)

【问题讨论】:

  • 你已经问过smae wuestion了..?!
  • @Filip:上一个没有被清除并被搁置。所以我更正了问题并再次询问。

标签: objective-c nsstring


【解决方案1】:

你可以像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

编辑: 上述解决方案不能很好地扩展。存储重复字符 在 dictionary 中,正如@waf 的回答中所建议的那样,或者在 set 中,可能会更好:

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];
                }

            }];

【讨论】:

  • 感谢 Martin R:你是救世主...:)
【解决方案2】:

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

如果顺序很重要,那么每次您“记录”一个字符串并且在附加到最初为空的字符串之前还没有看到它。

伪代码:jointString = first+second。对于joint中的每个char,如果NSMutableDict !have,插入char,finalString = finalString + thisChar。

【讨论】:

  • 第一个字符串的字符呢??如何删除它们??
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2018-12-02
  • 2015-09-22
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多