c_cpptrie用于按字母顺序排列的面试问题(代码片段)

author author     2023-01-10     538

关键词:

#include <iostream>
#include <climits>
 
// Implmentation of trie structure for checking membership of large set of strings
 
#define TRIE_SIZE SCHAR_MAX + 1
 
struct TrieState

	enum Kind
	
		Empty,
		Part,
		End
	;
;
 
class TrieNode

public:
	static void cleanChildren(TrieNode** child)
	
		for(size_t i = 0; i < TRIE_SIZE ; i++)
			child[i] = nullptr;
	
	TrieNode()
	
		TrieNode::cleanChildren(_children);
	
	~TrieNode()
	
		for(size_t i = 0; i < TRIE_SIZE ; i++) 
			delete _children[i];
	
	// Trie is indexed with char type
	TrieState::Kind& stateAt(char index)
	
		return _states[index % TRIE_SIZE];
	
 
    // Trie is indexed with char type.
	TrieNode* childAt(char index) const
	
		return _children[index % TRIE_SIZE];
	
 
	void setChildAt(TrieNode* child, char index)
	
		_children[index % TRIE_SIZE] = child;
	
 
	bool isEmptyAt(char index) const
	
		return _children[index % TRIE_SIZE] == nullptr;
	
private:
	TrieNode* _children[TRIE_SIZE];
	TrieState::Kind _states[TRIE_SIZE];
;
 
// Used for manufacturing instances of tries, and inserting strings.
class TrieManager

public:
	static void insert(TrieNode* trie, const char* string)
	
		TrieNode* traverse = trie;
		char indexKey;
		// Does not insert anything if string is empty
		while(*(string + 1))
		
			indexKey = *string++;
			switch(traverse->stateAt(indexKey))
			
				case TrieState::Empty:
				        traverse->setChildAt(new TrieNode(), indexKey);
				        traverse->stateAt(indexKey) = TrieState::Part;
				        traverse = traverse->childAt(indexKey);
				        break;
				case TrieState::Part:
				       traverse = traverse->childAt(indexKey);
				       break;
				case TrieState::End:
				       traverse->stateAt(indexKey) = TrieState::Part;
				       traverse = traverse->childAt(indexKey);
				       break;
			
		
		// handles last character in string.
		indexKey = *string;
		switch(traverse->stateAt(indexKey))
			
				case TrieState::Empty:
				        traverse->stateAt(indexKey) = TrieState::End;
				        break;
				case TrieState::Part:
				case TrieState::End:
				       return;
			
	
 
	static bool contains(TrieNode* trie, const char* string)
	
		TrieNode* traverse = trie;
		while(*string)
		
			switch(traverse->stateAt(*string))
			
				case TrieState::Empty:
				     return false;
				case TrieState::Part:
				     traverse = traverse->childAt(*string);
				     string++;
				     break;
				case TrieState::End:
				     return true;
 
			
		
		return false;
	

  static void printFirst(TrieNode* trie)
  
    for(char i = 0; i < SCHAR_MAX; i++)
    
      switch(trie->stateAt(i))
      
        case TrieState::Part:
              std::cout << i;
              TrieManager::printFirst(trie->childAt(i));
              return;
        case TrieState::End:
              std::cout << i << '\n';
              return; 
        case TrieState::Empty:
              break;
      
    
  
;



 
int main(int argc, char const *argv[])

	TrieNode* trie = new TrieNode();
	TrieManager::insert(trie, "Foo!");
	TrieManager::insert(trie, "Doo!");
	TrieManager::insert(trie, "Food!");
	TrieManager::insert(trie, "Aaaaaaa");
	std::cout << "Contains Doo! " << TrieManager::contains(trie, "Doo!") << "\n";
	TrieManager::printFirst(trie);
	delete trie;
	return 0;

MySQL - 首先按字母顺序排列字段,然后按小数顺序排列

】MySQL-首先按字母顺序排列字段,然后按小数顺序排列【英文标题】:MySQL-Orderfieldalphabeticallyfirstandthendecimally【发布时间】:2018-06-2516:34:50【问题描述】:我的数据库中有一个VARCHARname字段,其中包含表示软件版本号的字符和小... 查看详情

输入的单词是不是按字母顺序排列?

】输入的单词是不是按字母顺序排列?【英文标题】:Istheinputwordinalphabeticalorder?输入的单词是否按字母顺序排列?【发布时间】:2020-06-0716:37:09【问题描述】:我正在编写一个函数,该函数将返回true或false关于输入字符串是否... 查看详情

dplyr 按字母倒序排列[重复]

...8-04-1900:58:57【问题描述】:我很好奇为什么排列功能不适用于字母顺序而不是逆字母顺序。df<-data.frame(string=as.character(c("b","a","c")),stringsAsFactors=F)df%>%arrang 查看详情

维护按字母顺序排列的链表

】维护按字母顺序排列的链表【英文标题】:Maintaininganalphabeticallyorganizedlinkedlist【发布时间】:2016-06-0714:26:24【问题描述】:我正在学习c++,并试图按字母顺序维护一个链表。如果我要输入一个名字列表,比如“Mary,bob,sally,larry... 查看详情

按字母顺序排列的字符串

】按字母顺序排列的字符串【英文标题】:stringinalphabeticalorder【发布时间】:2014-08-2216:19:41【问题描述】:我正在尝试使用递归函数按字母顺序打印字符串,但它给出的字符串下标超出范围错误。stringalpha(stringword)chartemp;intcount=... 查看详情

按字母顺序排列的名称和描述列表

】按字母顺序排列的名称和描述列表【英文标题】:Alphabeticalplistwithnameanddescription【发布时间】:2014-05-2717:46:37【问题描述】:如何制作一个按字母顺序排列并具有名称和描述属性的plist?我已经有一个包含26个数组的plist,每个... 查看详情

按字母顺序排列的数据透视表

】按字母顺序排列的数据透视表【英文标题】:Pivottableinalphabeticalorder【发布时间】:2021-02-0316:40:34【问题描述】:我是MySQL新手,我想旋转一个表表仅包含两列Name和Occupation其中没有null值是inserted我想旋转职业列,以便每个名称... 查看详情

用单词和数字按字母顺序排列字符串

】用单词和数字按字母顺序排列字符串【英文标题】:Alphabetizestringwithwordsandnumbers【发布时间】:2016-02-2706:11:35【问题描述】:我试图弄清楚如何对包含单词和数字的单个字符串进行字母排序。正如您在下面看到的,我尝试使用... 查看详情

带有名称和描述 numberOfRowsInSection 问题的按字母顺序排列的 plist

】带有名称和描述numberOfRowsInSection问题的按字母顺序排列的plist【英文标题】:AlphabeticalplistwithnameanddescriptionnumberOfRowsInSectionissues【发布时间】:2014-05-2816:36:21【问题描述】:所以,我有一个描述多种美食的plist。在我的plist中,... 查看详情

XML 反序列化忽略不按字母顺序排列的属性

】XML反序列化忽略不按字母顺序排列的属性【英文标题】:XMLdeserializationignorespropertiesoutofalphabeticalorder【发布时间】:2016-06-1620:16:42【问题描述】:我有一个小问题-XML反序列化完全忽略不按字母顺序排列的项目。在示例对象(... 查看详情

按字母顺序排列单词

】按字母顺序排列单词【英文标题】:Alphabeticallysortingthewords【发布时间】:2013-12-1409:48:41【问题描述】:我通过将单词的第一个元素的ascii与另一个单词进行比较来对单词进行排序。我使用结构存储和数组存储5个单词,然后使... 查看详情

ListView 按字母顺序排列,没有 Comparable

】ListView按字母顺序排列,没有Comparable【英文标题】:ListViewinalphabeticalorderwithoutComparable【发布时间】:2016-08-2501:15:33【问题描述】:我正在尝试按WORDS列的值按字母顺序排列此ListView。我已经阅读了有关此主题的答案,但仍未找... 查看详情

Jquery排序 - 按字母顺序排列图像[重复]

】Jquery排序-按字母顺序排列图像[重复]【英文标题】:Jquerysort-orderimagesalphabetically[duplicate]【发布时间】:2017-08-2011:28:42【问题描述】:我正在尝试按字母顺序对徽标页面进行排序,因此已将徽标名称放在H1标记中并使用了下面... 查看详情

按字母顺序排列已安装应用程序的列表

】按字母顺序排列已安装应用程序的列表【英文标题】:Alphabatizelistofinstalledapps【发布时间】:2011-12-3117:47:24【问题描述】:您好,我按照以下教程成功在我的应用程序中列出了所有已安装的应用程序。Listallinstalledappsinstyle但是... 查看详情

使java中的字符串按字母顺序排列?

】使java中的字符串按字母顺序排列?【英文标题】:Makeastringinjavabeorderedalphabetically?【发布时间】:2017-07-2300:18:02【问题描述】:我试图让一个人的名字按字母/反向字母顺序打印。到目前为止我有这个:Scannername=newScanner(System.in... 查看详情

通过迭代按字母顺序排列字符串

】通过迭代按字母顺序排列字符串【英文标题】:Arrangingastringalphabeticallybyiteration【发布时间】:2018-07-1416:47:53【问题描述】:我想我已经找到了按字母顺序排列字符串(ABCDE以任意顺序)的最小移动量。有一些条件必须遵守:... 查看详情

TSLint 对未按字母顺序排列的导入源不满意

】TSLint对未按字母顺序排列的导入源不满意【英文标题】:TSLintunhappywithnon-alphabetizedimportsources【发布时间】:2019-07-3113:49:00【问题描述】:我有几个TSLint不满意的TypeScript导入源,因为它们显然没有按字母顺序排列。importDialogNoCo... 查看详情

显示按字母顺序排列的搜索结果时如何修改行数

】显示按字母顺序排列的搜索结果时如何修改行数【英文标题】:Howtomodifyrowcountswhendisplayingalphabetizedsearchresults【发布时间】:2015-11-0311:06:24【问题描述】:我正在使用DataTables创建一个能够动态过滤上下文的表。我正在遵循基本... 查看详情