Leet Code 14 Longest Common Prefix
来源:互联网 发布:tensorflow 微调模型 编辑:程序博客网 时间:2024/05/17 02:54
Write a function to find the longest common prefix string amongst an array of strings
【算法思路】
1. 找最短的一个串,然后与其他串每个字符比较
public String longestCommonPrefix(String[] strs) { if(strs.length == 0) return ""; if(strs.length == 1) return strs[0]; int minLen = strs[0].length(); int minIndex = 0; for (int i = 0; i < strs.length; i ++) { if (strs[i].length() < minLen) { minLen = strs[i].length(); minIndex = i; } } StringBuilder sb = new StringBuilder(""); for(int i = 0; i < minLen; i ++) { int flag = 0; for(int j = 0; j < strs.length; j ++) { if(strs[j].charAt(i) != strs[minIndex].charAt(i)) { flag = 1; break; } } if(flag == 0) { sb.append(strs[minIndex].charAt(i)); } else { return sb.toString(); } } return sb.toString(); }
【CODE V2】
public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length == 0) return ""; int minLen=Integer.MAX_VALUE; for(String str: strs){ if(minLen > str.length()) minLen = str.length(); } if(minLen == 0) return ""; for(int j=0; j<minLen; j++){ char prev='0'; for(int i=0; i<strs.length ;i++){ if(i==0) { prev = strs[i].charAt(j); continue; } if(strs[i].charAt(j) != prev){ return strs[i].substring(0, j); } } } return strs[0].substring(0,minLen);}
【复杂度】
时间:O(N^2)
空间:O(N)
2. 遍历字符串数组,每次用当前prefix和下一个字符串匹配以生成新的prefix。
[Code]
1: string longestCommonPrefix(vector<string> &strs) { 2: // Start typing your C/C++ solution below 3: // DO NOT write int main() function 4: string compare; 5: if(strs.size() == 0) return compare; 6: compare = strs[0]; 7: for(int i =1; i< strs.size() ; i++) 8: { 9: string prefix; 10: int k =0; 11: while(k< compare.size() && k< strs[i].size()) 12: { 13: if(compare[k] != strs[i][k]) 14: break; 15: prefix.append(1, compare[k]); 16: k++; 17: } 18: compare.clear(); 19: compare.append(prefix.c_str()); 20: } 21: return compare; 22: }
3. 对于每一个字母比较所有字符串,直到遇到任何一个不匹配。这个时间复杂度比上一个解法好一些,避免了不必要的比较。
string longestCommonPrefix(vector<string> &strs) { 2: string prefix; 3: if(strs.size() ==0) return prefix; 4: int len =0; 5: while(1) 6: { 7: char var; 8: int i=0; 9: for(; i< strs.size(); i++) 10: { 11: if(i ==0) var =strs[0][len]; 12: if(strs[i].size() == len || var != strs[i][len]) 13: break; 14: } 15: if(i!= strs.size()) 16: break; 17: len++; 18: prefix.append(1, var); 19: } 20: return prefix; 21: }
0 0
- Leet Code 14 Longest Common Prefix
- [leet code] Longest Common Prefix
- leet code Longest Common Prefix
- Leet Code OJ 14. Longest Common Prefix
- 【LEET-CODE】14. Longest Common Prefix
- Leet Code OJ 14. Longest Common Prefix [Difficulty: Easy]
- CODE 117: Longest Common Prefix
- 14、Longest Common Prefix
- 14,Longest Common Prefix
- #14 Longest Common Prefix
- 14Longest Common Prefix
- 14Longest Common Prefix
- 14 Longest Common Prefix
- 【14】Longest Common Prefix
- 14-Longest Common Prefix
- leetcode 日经贴,Cpp code -Longest Common Prefix
- LeetCode 14: Longest Common Prefix
- LeetCode(14) Longest Common Prefix
- 构建Hadoop metric
- Linux下Apache服务器搭建
- uva 11098 - Battle II(强联通)
- HDU 1885
- iOS 之NSJSONReadingOptions说明
- Leet Code 14 Longest Common Prefix
- 二分查找
- linux下为php开启oci8扩展
- HDU2007平方和与立方和
- iOS8下UILabel如何自适应高度(自动换行)
- 软考必备
- LVS 归纳
- 设计模式(c++版)
- 安卓之网络连接