将特有元素插入特里

问题描述

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的路径。