最近给项目加个屏蔽敏感词的功能,在网上搜了一遍基本都是使用DFA算法由敏感词构造树,然后遍历输入文本,每次从树的根节点往下匹配,匹配成功则替换成*之类的即可,搜了一圈没有发现OC版的算法,故按着算法用OC写了一遍,分享一波。
类定义如下:
#import "WordFilter.h"
#define EXIST @"isExists"
@interface WordFilter()
@property (nonatomic,strong) NSMutableDictionary *root;
@property (nonatomic,assign) BOOL isFilterClose;
@end
@implementation WordFilter
static WordFilter *instance;
+ (instancetype)sharedInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc]init];
});
return instance;
}
算法:
- (void)init