Pen*_*One 4 sorting iphone objective-c nsstring
有谁知道是否有一种方法来对ASCII字符的NSString进行排序?理想情况下,我想要一个方法来检查一个字符串是否是另一个字符串的排列,所以我的想法是以规范的方式对两个字符串进行排序,然后比较它们.任何想法将不胜感激.谢谢.
编辑:这是我更精确的事情.我想要一个方法,它接受两个NSStrings输入并返回一个BOOL:
- (BOOL)isPermutation:(NSString *)string1
ofString:(NSString *)string2;
Run Code Online (Sandbox Code Playgroud)
返回值应该是YES一个字符串可以重新排列到另一个字符串中,NO否则.
该NSString的是用ASCII字符的任意字符串,而不是句子或数字或单词.只是带有ASCII字符的任意字符串.
你真的需要排序来检查这个吗?考虑算法.
create 2 counter arrays, ac and bc, both of size 128 initialize them with 0 for each char c in string a make ac[c]++ for each char c in string b make bc[c]++ if all 128 counters in ac and bc are same, then they r permutation of one another
这可能甚至比排序更快.
编辑:这是一个可能的实现.由于我没有编译代码,可能会有一些小错误.
- (BOOL)isPermutation:(NSString *)string1 ofString:(NSString *)string2 {
if ([string1 length] != [string2 length]) {
return FALSE;
}
NSInteger counter1[128];
NSInteger counter2[128];
NSInteger i;
NSInteger len = [string1 length];
for (i = 0; i < 128; i++) {
counter1[i] = counter2[i] = 0;
}
for (i = 0; i < len; i++) {
unichar ch1 = [string1 characterAtIndex:i];
unichar ch2 = [string2 characterAtIndex:i];
counter1[ch1]++;
counter2[ch2]++;
}
for (i = 0; i < 128; i++) {
if (counter1[i] != counter2[i]) {
return FALSE;
}
}
return TRUE;
}