這是一道很簡單的題目,判斷輸入的多個字符串的公有前序,簡單的邏輯遍歷查找就好。
算法流程:
- 判斷輸入的字符串數量,小於2時候做出相應返回。
- 獲取最短字符串的長度。
- 設定標記flag,控制跳出循環,與長度返回的長度len。
- 在最短字符串長度的范圍內循環。
- 循環中每次遍歷全部字符串len 位的字符。
- 遇到不同設置flag 跳出循環,如果全部都相同len+1 進入下次循環。
- 返回長度。
其實可以簡單點不求最短字符串長度,將這一步放入到判斷是否相同時候。
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 class Solution { 7 public: 8 string longestCommonPrefix(vector<string> &strs) { 9 int nvec = strs.size(); 10 if(nvec<1) return ""; 11 if(nvec<2) return strs[0]; 12 int nmin = strs[0].length(),len=0; 13 bool flag = true; 14 for(int i =1;i<nvec;i++){ 15 if(nmin>strs[i].length()) nmin = strs[i].length(); 16 } 17 while(len<nmin){ 18 for(int i=1;i<nvec&&flag;i++){ 19 if(strs[i][len]==strs[0][len]) continue; 20 flag = false; 21 } 22 if(!flag) break; 23 len++; 24 } 25 return strs[0].substr(0,len); 26 } 27 }; 28 29 int main() 30 { 31 vector<string> strs={"289","25324","22434","232","234"}; 32 Solution sol; 33 cout<<sol.longestCommonPrefix(strs)<<endl; 34 return 0; 35 }
