Longest Common Prefix
来源:互联网 发布:极品飞车ola车数据 编辑:程序博客网 时间:2024/05/31 18:35
Write a function to find the longest common prefix string amongst an array of strings.
求解最长公共前缀,看到第一反应是用trie树,简历一颗trie树,然后查找下,某个点的计数次数是不是等于len,不等于则停止,等于则加入公共前缀字符串,继续查找。
class TrieNode {public: // Initialize your data structure here. TrieNode(char v): val(v), count(0){ for(int i = 0; i < 256; ++i) next[i] = NULL; } TrieNode *next[256]; char val; int count;};class Trie {public: Trie() { root = new TrieNode(' '); } TrieNode* createNode(char v) { TrieNode *newNode = new TrieNode(v); return newNode; } // Inserts a word into the trie. void insert(string word) { int len = word.size(); TrieNode *tmpNode = root; for(int i = 0; i < len; ++i) { int tmp = word[i]; if(tmpNode->next[tmp]) { ++tmpNode->next[tmp]->count; } else { tmpNode->next[tmp] = createNode(word[i]); ++tmpNode->next[tmp]->count; } tmpNode = tmpNode->next[tmp]; } } string longestCommonPrefix(int number) { string ans = ""; TrieNode *tmpNode = root; while(NULL != tmpNode) { int count = 0, index = -1; for(int i = 0; i < 256; ++i) { if(NULL != tmpNode->next[i]) { ++count; if(count >= 2) break; index = i; } } if(tmpNode != root && tmpNode->count == number) ans.push_back(tmpNode->val); if(count == 2 || (tmpNode != root && tmpNode->count != number)) break; else { if(count == 0) break; tmpNode = tmpNode->next[index]; } } return ans; } private: TrieNode* root;};class Solution {public: //trie树, 构造一颗trie树,然后找到节点count不减少的节点,只要发现减少, //则说明该节点之前是公共前缀 string longestCommonPrefix(vector<string>& strs) { int len = strs.size(); string ans = ""; if(len < 1) return ans; if(len == 1) return strs[0]; Trie trie; for(int i = 0; i < len; ++i) trie.insert(strs[i]); return trie.longestCommonPrefix(len); }};
0 0
- LeetCode: Longest Common Prefix
- LeetCode Longest Common Prefix
- LeetCode : Longest Common Prefix
- [Leetcode] Longest Common Prefix
- leetcode6:Longest Common Prefix
- leetcode22: longest common prefix
- [LeetCode] Longest Common Prefix
- Leetcode14: Longest Common Prefix
- Longest Common Prefix
- Longest Common Prefix
- Longest Common Prefix
- [LeetCode]Longest Common Prefix
- Longest Common Prefix
- LeetCode-Longest Common Prefix
- Longest Common Prefix
- [LeetCode] Longest Common Prefix
- Longest Common Prefix
- LeetCode - Longest Common Prefix
- C语言面试题
- Leetcode Isomorphic Strings
- 异常处理中的问题
- [UVA12545]Bits Equalizer[贪心]
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架
- Longest Common Prefix
- 455A - Boredom
- 关于Javascript变量类型的一些注意点
- 做嵌入式经典网站!(转)
- 乘积最大
- 解决 Boot Camp 虚拟机升级到 Windows 10 后 Parallels Desktop 不能识别的问题
- 使用core dump查看程序运行异常
- NSData NSDate NSString NSArray NSDictionary 相互转换
- POJ 2749 && HDU 1815 Building roads(2-SAT+二分)