Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
发布日期:2025-04-25 18:04:18 浏览次数:3 分类:精选文章

本文共 2334 字,大约阅读时间需要 7 分钟。

Objective-C 实现字符串自动完成 using Trie(使用 Trie 数据结构)

使用 Trie 数据结构实现字符串自动完成是一个常见的算法问题。本文将展示一个完整的 Objective-C 示例代码,说明如何利用 Trie 实现字符串的自动完成功能。

Trie 节点定义

首先,我们需要定义一个 Trie 节点类,该类包含子节点和一个标志,用于指示该节点是否是一个单词的结束。

@interface TrieNode : NSObject  
@property (nonatomic, strong) NSMutableDictionary *children;
@property (nonatomic, assign) Bool isEndOfWord;
@end
插入单词到 Trie 中

为了实现自动完成功能,我们需要将单词插入到 Trie 中。以下是 Objective-C 中的实现代码:

+ (void) insertWord:(NSString *)word intoTrie:(TrieNode *)root  
{
TrieNode *currentNode = root;
for (char c in word) {
if (!currentNode.children[c]) {
currentNode.children[c] = [TrieNode new];
}
currentNode = currentNode.children[c];
}
currentNode.isEndOfWord = YES;
}
搜索 Trie 中的单词

在输入时,我们需要根据用户输入的字符逐步查找 Trie 中对应的节点。如果最终节点是单词的结束节点,则表示该单词存在于词典中。

+ (NSArray *) searchWord:(NSString *)input inTrie:(TrieNode *)root  
{
TrieNode *currentNode = root;
NSMutableArray *results = [NSMutableArray new];
for (char c in input) {
if (!currentNode.children[c]) {
return results;
}
currentNode = currentNode.children[c];
}
if (currentNode.isEndOfWord) {
[results addObject:input];
}
return results;
}
完整示例代码

下面是一个完整的 Objective-C 实现示例,展示了 Trie 数据结构的使用方法:

@interface Trie  
@property (nonatomic, strong) TrieNode *root;
- (void) insertWord:(NSString *)word;
- (NSArray *) searchWords:(NSString *)input;
@end
@interface TrieNode : NSObject
@property (nonatomic, strong) NSMutableDictionary
*children;
@property (nonatomic, assign) Bool isEndOfWord;
@end
@implementation Trie
(void) insertWord:(NSString *)word
{
TrieNode *currentNode = [TrieNode new];
TrieNode *root = self.root;
root.children = [NSMutableDictionary new];
for (char c in word) {
if (!root.children[c]) {
root.children[c] = [TrieNode new];
}
root = root.children[c];
}
root.isEndOfWord = YES;
}
(NSArray *) searchWords:(NSString *)input
{
TrieNode *currentNode = self.root;
NSMutableArray *results = [NSMutableArray new];
for (char c in input) {
if (!currentNode.children[c]) {
return results;
}
currentNode = currentNode.children[c];
}
if (currentNode.isEndOfWord) {
[results addObject:input];
}
return results;
}
@end

通过上述代码,我们可以轻松地在 Objective-C 中实现字符串的自动完成功能。Trie 数据结构能够高效地存储和查找单词,适用于需要频繁输入和自动完成功能的场景。

上一篇:Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
下一篇:Objective-C实现子集数的总和等于给定的数算法(附完整源码)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月24日 00时41分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章