Это возвращает то, что просит ваш пример ...
NSString* a = @"cant";
NSString* b = @"connect";
NSMutableString* mb = [NSMutableString stringWithString:b];
NSUInteger i;
for (i=0; i<[a length]; i++) {
NSString* theLetter = [a substringWithRange:NSMakeRange(i, 1)];
NSRange r = [mb rangeOfString:theLetter];
if (r.location != NSNotFound) {
[mb replaceCharactersInRange:r withString:@"-"];
}
}
NSLog(@"mb: %@", mb);
Однако я бы не назвал это перестановкой. Для меня перестановка была бы верна, только если все символы из строки "a" содержались в строке "b". В вашем примере, поскольку буква a в буквы cant отсутствует в строке b, я бы сказал, что cant не является перестановкой соединения. С этим определением я бы использовал это:
-(BOOL)isString:(NSString*)firstString aPermutationOfString:(NSString*)secondString {
BOOL isPermutation = YES;
NSMutableString* mb = [NSMutableString stringWithString:secondString];
NSUInteger i;
for (i=0; i<[firstString length]; i++) {
NSString* theLetter = [firstString substringWithRange:NSMakeRange(i, 1)];
NSRange r = [mb rangeOfString:theLetter];
if (r.location != NSNotFound) {
[mb deleteCharactersInRange:r];
} else {
return NO;
}
}
return isPermutation;
}