问题描述
list.innerHTML = `
<p id="text" class="text">${todoItem.task}</p>
<div id="taskListBtn">
<span id="button-tick-${todoItem.id}" class="material-icons tick-style">check_circle</span>
<span id="button-edit-${todoItem.id}" class="material-icons edit-style">edit</span>
<span id="button-remove-${todoItem.id}" class="material-icons remove-style">delete</span>
</div>
`;
const addClasses = ['class1','class2'];
const paragtaph = list.querySelector('p');
paragtaph.className += ` ${addClasses.join(' ')}`;
所以我要插入字符串以创建唯一的trie数据结构,但是此插入算法无法检测到任何重复的字符串,有人可以帮助我此插入算法如何仅用于插入唯一元素吗?
解决方法
您可以使用end
的{{1}}属性检查字符串重复项。让我们将struct node
称为此布尔方法,并将其添加为find
方法的第一行。
insert
运行时:与之前的bool find(struct node *root,string s)
{
struct node *temp = root;
for(int i=0;i<s.length();i++)
{
if(temp->idx[s[i]-'a']==NULL)
return false;
temp = temp->idx[s[i]-'a'];
}
return temp->end;
}
void insert(struct node *root,string s)
{
if(!find(root,s)) return;
struct node *temp = root;
for(int i=0;i<s.length();i++)
{
if(temp->idx[s[i]-'a']==NULL)
temp->idx[s[i]-'a']=create();
temp = temp->idx[s[i]-'a'];
(temp->cnt)++;
}
temp->end=1;
}
相同,其中O(m)
是m
的长度。
注意:我制作了s
方法,因为无论如何您都需要遍历该Trie路径最多两次。开头提到了一种方法,第二种方法是当您拥有表示find
的节点时检查重复项(end
属性),如果确实是重复的字符串,则再次遍历{{ 1}}固定s
属性中额外+1的路径。