LeetCode-14 最长公共前缀
生活随笔
收集整理的這篇文章主要介紹了
LeetCode-14 最长公共前缀
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 我的解法
- 反思1
- 優化1
- 反思2
- 優化2
- 其他思路
- 總結
- Github
題目描述
編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 “”。
示例 1:
輸入: [“flower”,“flow”,“flight”]
輸出: “fl”
示例 2:
輸入: [“dog”,“racecar”,“car”]
輸出: “”
解釋: 輸入不存在公共前綴。
說明:
所有輸入只包含小寫字母 a-z 。
我的解法
public String longestCommonPrefix(String[] strs) {//特殊情況if(null == strs||0 == strs.length)//字符數組為空的情況return "";if(1 == strs.length)//數組中只有一個字符串,那么前綴就是他本身return strs[0];boolean finalRound = false;boolean isPlusIndex = true;int index = 0;while(!finalRound){for(int i=1; i<strs.length; i++){if(index > strs[i-1].length() ||index > strs[i].length()){//如果超出某個字符串長度了,終止//這個也同時校驗了某一個字符串為空的情況finalRound = true;isPlusIndex = false;break;}if(strs[i-1].substring(0,index).equals(strs[i].substring(0,index))) {} else{//如果前綴不相等了,終止finalRound = true;isPlusIndex = false;break;}}if(isPlusIndex)index++;}return strs[0].substring(0,index-1);//因為我把最開始假設多了一位“”,所以實際的索引要減去一}用間:9ms
戰勝:77.55%
反思1
優化1
public String longestCommonPrefix3(String[] strs) {if(strs.length == 0) return "";String prefix = strs[0];for (int i = 0; i <= strs.length - 1; i++){while(!strs[i].startsWith(prefix)){prefix = prefix.substring(0,prefix.length()-1);}}return prefix;}用時:9ms
戰勝:77.55%
==! 在我的電腦上并沒有看出太大的差距
反思2
優化2
public String longestCommonPrefix4(String[] strs) {if(strs.length == 0 || strs[0].length() == 0) return "";String prefix = strs[0];for (int i = 1; i <= strs.length - 1; i++){if(!"".equals(prefix)){while(!strs[i].startsWith(prefix)){prefix = prefix.substring(0,prefix.length()-1);}}}return prefix;}用時:6ms
戰勝:98.61%
其他思路
我比較喜歡這優化的版本,雖然leetcode上有更快的版本(并沒有覺得有什么可圈可點的地方,跑出了4ms估計是網絡電腦的原因,我本機還是跑了9ms)。但是少量的代碼更加意味著思路的清晰。有時候這才是更重要的。
總結
有的時候找前面相似的問題,從末位排除是更好的辦法。
Github
LeetCode刷題筆記
總結
以上是生活随笔為你收集整理的LeetCode-14 最长公共前缀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode-38 报数
- 下一篇: LeetCode-19 删除链表的倒数第