Leetcode个人题解14
2017-12-05 17:14
239 查看
LEETCODE专题
14. Longest Common Prefix
题目要求:题目要求我们找到一个字符串数组里的最长共同前缀字符串。
思路:
这道题目比较简单,大概思路就是一般情况时我们可以从第1和第2个字符串开始匹配最长共同前缀字符串,再匹配第3和第4个字符串,……以此类推。此外,可以先初始化匹配字符串为第1个字符串,表示第1个字符串与第0个字符串匹配的结果,可以理解为第0个字符串是“万金油”,此后所有的匹配结果都要与上一组的匹配结果进行比较,如果后来的结果长度更长则不改变之前的结果,否则后来匹配的结果覆盖最长匹配字符串并作为下一组匹配的结果的比较字符串。
这道题目主要有两个坑(之前笔者没学好string(&…&!))。笔者使用的最长共同前缀字符串prefix的初始化为
string prefix = "";
第一个坑是vector有可能为空,这是后直接返回prefix会产生”reference to nullptr”的错误,应该改为
return "";
此处返回常量字符串的话会自动生成’\0’,免除上述的困扰。
第二个坑就是vector有可能只有一个字符串,此时返回的应该是该字符串。(其实笔者后来该的时候发现是完全可以跳过这个坑的,不过当时脑抽了…)
下面直接上代码:
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if (strs.size() == 0) return ""; if (strs.size() == 1) return strs[0]; string prefix = strs[0], temp; int i, j; for (i = 0; i < strs.size() - 1; i++) { j = 0; if (strs[i + 1].length() == 0) return ""; temp.clear(); while (j < strs[i].length() && j < strs[i + 1].length() && strs[i][j] == strs[i + 1][j]) { temp += strs[i][j++]; } if (temp.length() < prefix.length()) prefix = temp; } return prefix; } };
时间复杂度:O(nm)
相关文章推荐
- 个人记录-LeetCode 14. Longest Common Prefix
- 【一天一道LeetCode】#14 Longest Common Prefix
- Leetcode个人题解714
- LeetCode 笔记系列 14 N-Queen II [思考的深度问题]
- 目前个人总结及未来方向(13-11~~14-7)
- Partition Equal Subset Sum - leetcode 416号题目个人题解
- [LeetCode] 14 - Longest Common Prefix
- LeetCode 14 : Longest Common Prefix (Java)
- [leetcode 14] Longest Common Prefix
- 【LeetCode】14 Longest Common Prefix
- Leetcode-14. Longest Common Prefix
- [leetcode:python]14.Longest Common Prefix
- [Leetcode]14. Longest Common Prefix
- [leetcode]14. Longest Common Prefix
- 个人记录-LeetCode 39. Combination Sum
- 个人记录-LeetCode 4.Median of Two Sorted Arrays
- Longest common prefix_Leetcode_#14
- 个人记录-LeetCode 1.Two Sum
- leetcode - 14.Longest Common Prefix
- 个人记录-LeetCode 45. Jump Game II