有谁知道是否有一种方法可以对 ASCII 字符的 NSString 进行排序?理想情况下,我想要一种方法来检查一个字符串是否是另一个字符串的排列,所以我的想法是以规范的方式对两个字符串进行排序,然后比较它们。任何想法将不胜感激。谢谢。
编辑:这正是我所追求的。我想要一个将两个 NSStrings
作为输入并返回一个 BOOL
的方法:
- (BOOL)isPermutation:(NSString *)string1
ofString:(NSString *)string2;
如果一个字符串可以重新排列成另一个字符串,则返回值应为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; }
关于iphone - 有没有一种方法可以对 NSString 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503582/