編寫一個函數來查找字符串數組中的最長公共前綴。
若是不存在公共前綴,返回空字符串 ""。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。
說明:
全部輸入只包含小寫字母 a-z 。數組
思路有兩種:函數
第一種:縱向掃描:
1.第一個字符串與餘下的全部字符串逐個比較。首先,找出第一個字符串與第二個字符串的最長公共前綴;而後讓這個公共前綴和第三個字符串比較找出它們的公共前綴,依次直至遍歷完全部的字符串。
2.第一個字符串與第二個字符串從頭開始比較直到遇到不相同的字符爲止,並記錄最後一個相同的字符的索引right,而後第一個字符串與第三個字符串從頭開始遍歷時,若是遍歷至索引right處還沒遇到不一樣的字符,則中止遍歷,從0到right的字符串即爲這三個字符串的最長公共前綴,若是沒有遍歷至索引right處,就有不一樣的字符,則更新right的值,直至遍歷完全部的字符串。
第二種:橫向掃描:
1.同時遍歷全部的字符串的第i個字符是否與第一個字符串的第i個字符是否相同,若是出現不相同,那麼最長公共前綴即到上一個字符爲止。code
縱向掃描:索引
string longestCommonPrefix(vector<string>& strs) { if(strs.size() <= 0) { return ""; } int right = strs[0].length(); for(int i = 1;i < strs.size();i++) { for(int j = 0; j < right ; j++) { if(strs[0][j] != strs[i][j]) { right = j; break; } } } return strs[0].substr(0,right); }
橫向掃描:字符串
string longestCommonPrefix(vector<string>& strs) { if(strs.size() <= 0) { return ""; } int right = strs[0].length(); for(int i = 0 ; i < right; i++) { for(int j = 1 ; j < strs.size(); j++) { if(strs[j][i] != strs[0][i]) { right = i; break; } } } return strs[0].substr(0,right); }
正常思路通常都會是先找出兩個字符串的最長公共前綴,在用這個公共前綴和餘下的字符串逐一尋找共同的前綴。
橫向的思惟是在網上看的,須要常常練習。拓寬思路,加油。string