-6

結合された 2 つの文字列で繰り返される文字を削除し、残りの一意の文字を使用して新しい文字列を生成するにはどうすればよいですか?

例えば:

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

繰り返される文字を削除することで、

新しい文字列は次のようになります: optimusredjah,

問題は、新しい文字列には1種類の文字のみが含まれ、繰り返されないことです(例でわかるように)

4

2 に答える 2

3

前の質問に対するこの回答と同様に続行できます。

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

            }];
于 2013-07-02T13:41:05.177 に答える
0

1 つの方法は、各文字列のすべての文字を繰り返し処理し、辞書でカウントを追跡することです。次に、各キーを調べて、キーを一度文字列に出力します。順序が重要かどうかはわかりません。

順序が重要な場合は、文字列を「ログに記録」するたびに、最初は空の文字列に追加する前に表示されていません。

疑似コード: jointString = first+second. NSMutableDict !have の場合、joint の各 char に対して、char を挿入し、finalString = finalString + thisChar を挿入します。

于 2013-07-02T13:20:24.727 に答える