LeetCode解题-#14-Longest Common Prefix
来源:互联网 发布:雅马哈电子琴入门 知乎 编辑:程序博客网 时间:2024/06/04 19:27
题目描述:
找出一组字符串中的最长共同前缀。
分析:
例如 abc, abd, ab,它们的最长共同前缀是 ab。
思路:
学习过的 Trie 刚好能解决这个问题,虽然不会是最优解,但可以练练手。
Trie:http://blog.csdn.net/cuit/article/details/78495561
先定义好 Trie 树 的数据结构:
这里用 HashMap(C#中是 Dictionary)存储树的子结点,优点是不用存储多余的空数组元素。
只实现了一个 Add(string s) 方法,用于添加字符串。
public class Trie { public TrieNode Root; public Trie() { Root = new TrieNode(); } public void Add(string s) { TrieNode runNode = Root; for (int i = 0; i < s.Length; i++) { var children = runNode.Children; char c = s[i]; TrieNode next = null; if (children.TryGetValue(c, out next)) { next = children[c]; } if (next == null) { children.Add(c, new TrieNode()); } runNode = children[c]; } runNode.IsEnd = true; } } public class TrieNode { public bool IsEnd { get; set; } public Dictionary<char,TrieNode> Children { get; set; } public TrieNode() { Children = new Dictionary<char, TrieNode>(); IsEnd = false; } }
然后依次把字符串数组插入Trie中,然后只要找到子结点的数量等于 1 且还有子结点时,即表示这些字符串还在共同前缀的树枝中,反正即表示有分支了,也即这些字符串不再有共同前缀了。
public string LongestCommonPrefix(string[] strs) { if(strs.Length == 0) { return ""; } Trie t = new Trie(); for(int i = 0; i < strs.Length; i++) { t.Add(strs[i]); } StringBuilder sb = new StringBuilder(); TrieNode runNode = t.Root; while (runNode.Children.Count == 1 && !runNode.IsEnd) { var keys = runNode.Children.Keys; foreach(var k in keys) { sb.Append(k); runNode = runNode.Children[k]; } } return sb.ToString(); }
阅读全文
0 0
- LeetCode解题-#14-Longest Common Prefix
- LeetCode #14 Longest Common Prefix 最长公共前缀 解题小节
- LeetCode解题报告--Longest Common Prefix
- [leetcode] 14. Longest Common Prefix 解题报告
- [LeetCode] Longest Common Prefix 解题报告
- [Leetcode] 14. Longest Common Prefix 解题报告
- [leetcode javascript解题]Longest Common Prefix
- [LeetCode] Longest Common Prefix 解题报告
- leetcode解题报告14. Longest Common Prefix
- [LeetCode 解题报告]014. Longest Common Prefix
- 【LeetCode】Longest Common Prefix 解题报告
- leetcode解题方案--014--Longest Common Prefix
- Leetcode Longest Common Prefix 解题报告
- LeetCode 14: Longest Common Prefix
- LeetCode(14) Longest Common Prefix
- LeetCode 14 Longest Common Prefix
- [leetcode 14] Longest Common Prefix
- leetcode 14-Longest Common Prefix
- 【Python编程:从入门到实践】第十三章:外星人
- oracle一个创建用户、创建表空间、授权、建表的完整过程
- 基于内容的推荐算法
- 9.输入DStream之Kafka数据源实战(基于Direct的方式)
- Java/11.12日/笔记
- LeetCode解题-#14-Longest Common Prefix
- Tomcat热部署
- Apache commons-pool2-2.4.2源码学习笔记
- tensorflow安装
- 闭包
- 数据类型
- mysql 中 时间和日期函数
- 设计模式--策略模式
- Java中Synchronized的用法