使用类目删除可变字符串中重复字母的一个算法
问题:为可变字符串类添加一个检测是不是有重复字母的方法:例如:@“abccd”调用这个函数后变成@”abcd”
思路:1.应用类目(Category)为NSMutableString添加一个方法;
2.找到字符串中重复字母并删除其中重复字母的算法:
(1)遍历字符串,提取相邻的字母进行比较;
(2)通过API提供的方法删除处在较后位置的重复字母;
(3)注意可变字符串删除字母后字符串长度的变化。
代码:
//新建一个NSMutableString类的类目,类目的声明文件
#import <Foundation/Foundation.h>
@interface NSMutableString (DeleteRepeatLetter)
// 编写一个删除重复字母的方法
-(void)deleteRepeate:(NSMutableString *)aMstr;
@end
// 类目的实现文件
#import "NSMutableString+DeleteRepeatLetter.h"
@implementation NSMutableString (DeleteRepeatLetter)
-(void)deleteRepeate:(NSMutableString *)aMstr
{
// 使用self.length在循环的时候时刻检测字符串的长度
for (int i = 0; i < self.lngth; i++)
{
char p = [aMstr characterAtIndex:i];
for (int j = i+1; j < self.length; j++)
{
char q = [aMstr characterAtIndex:j];
if (p == q)
{
[aMstr deleteCharactersInRange:NSMakeRange(j, 1)];
j--; // 为保证 j++后指向一致,所以要j--,因为删除字母后后面的字母会往前提
}
}
}
}
@end
// 在主函数中
#import "NSMutableString+DeleteRepeatLetter.h" // 导入类目
NSMutableString * str = [NSMutableStringstringWithString:@"aabbccddee"];
[str deleteRepeate:str];
NSLog(@"%@",str);