有人知道是否有一种方法可以对ascii字符的nsstring进行排序吗?理想情况下,我希望有一个方法检查一个字符串是否是另一个字符串的置换,因此我的想法是以规范的方式对两个字符串进行排序,然后进行比较。任何想法都将非常感激。谢谢。
编辑:这是我更确切地追求的。我想要一个以两个NSStrings
作为输入并返回一个BOOL
的方法:
- (BOOL)isPermutation:(NSString *)string1
ofString:(NSString *)string2;
如果一个字符串可以重新排列为另一个字符串,则返回值应为
YES
,否则返回值应为NO
。nsstrings是带有ascii字符的任意字符串,而不是句子、数字或单词。只是带有ascii字符的任意字符串。
最佳答案
你真的需要分类检查这个吗?考虑一下算法。
创建两个计数器阵列,ac和bc,大小都是128
用0初始化它们
对于字符串a中的每个字符c,使ac[c]++
对于字符串b中的每个字符c,将bc[c]设为++
如果ac和bc中的128个计数器都是相同的,则它们是相互排列的。
这甚至可能比排序运行得更快。
编辑:这是一个可能的实现。由于我没有编译代码,可能会有一些小错误。
-(bool)ispermutation:(nsstring*)字符串的字符串1:(nsstring*)字符串2{
如果([字符串1长度]!=[字符串2长度]{
返回false;
}
nsinteger计数器1[128];
nsinteger计数器2[128];
恩森特一号;
nsinteger len=[字符串1长度];
对于(i=0;i计数器1[i]=计数器2[i]=0;
}
对于(i=0;iunichar ch1=[字符串1字符索引:i];
unichar ch2=[字符串2字符索引:i];
计数器1[ch1]++;
计数器2[CH2]++;
}
对于(i=0;i如果(计数器1[I]!=计数器2[i]){
返回false;
}
}
返回真值;
}