如何删除两个字符串组合中的重复字母并使用剩余的唯一字母生成新字符串?
例如:
String 1= optimusprime;
String 2= dejathoras;
combined string : optimusprimedejathoras;
现在通过删除重复的字母,
新字符串应该是:optimusredjah,
问题是,新字符串中应该只有一种类型的字母,而不是重复的(如您在示例中看到的)
如何删除两个字符串组合中的重复字母并使用剩余的唯一字母生成新字符串?
例如:
String 1= optimusprime;
String 2= dejathoras;
combined string : optimusprimedejathoras;
现在通过删除重复的字母,
新字符串应该是:optimusredjah,
问题是,新字符串中应该只有一种类型的字母,而不是重复的(如您在示例中看到的)
您可以按照与上一个问题的答案类似的方式进行 :
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 的答案或在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];
}
}];
一种方法可能是遍历每个字符串中的所有字符并跟踪字典中的计数。然后遍历每个键并将该键打印一次到一个字符串。不确定订单是否重要。
如果顺序很重要,那么每次您“记录”一个字符串并且在附加到最初为空的字符串之前还没有看到它。
伪代码:jointString = first+second。对于关节中的每个 char,如果 NSMutableDict !have,则插入 char 和 finalString = finalString + thisChar。