iphone - 有没有一种方法可以对 NSString 进行排序?

标签 iphone objective-c sorting nsstring

有谁知道是否有一种方法可以对 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/

相关文章:

iphone - 相机快门打开事件的回调

iphone - 如何在 UIView 中不滚动显示多行文本?

ios - 重新初始化标签栏中的标签

mysql - 在mysql select语句中将公共(public)列值作为所有结果的标题

python - 为什么我的随机主元快速排序比固定主元快速排序慢?

iphone - 使用 iPod 录制和播放音频

iphone - 根据设备类型选择不同的 Storyboard

iOS从和App打开浏览器并在某个时候关闭它并返回到App?

iphone - 帮助着色由图像蒙版/边界定义的图层并将图像覆盖在顶部

php - 在 PHP 中,如何将具有已知键的数组元素移动到数组的末尾?