两年硕士超快的鸭,又要准备秋招啦!0508第一题~
题目
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
Example 1:
Input: ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
Note:
All given inputs are in lowercase letters a-z.
太久没用C++,一上来除了找了好久的格式也只剩下暴力求解:
1. 判断是不是空数组;
2. 判断是不是只有一个字符串;
3. 判断第一个字符串是不是长度为0;
4. 暴力循环,获取第一个字符串的第一个字符,依次与其他字符串的同个字符进行比较,如果不相等跳出第二层循环,返还当前的共同前缀。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int N = strs.size();
if(N == 0)
return "";
if(N == 1)
return strs[0];
if(strs[0].length() == 0 ){
return "";
}
string s;
int count = 0;
int tmp = 0;
for(int i=0; i<strs[0].length(); i++){
tmp = 0;
for(int k = 1; k<strs.size(); k++){
if(strs[0][i] != strs[k][i]){
tmp=1;
break;
}
}
if(tmp==1){
return s;
}
else{
s.push_back(strs[0][i]);
// cout<<s;
}
}
return s;
}
};
写着写着好像觉得可以再改进改进,我去试试~
刚刚想到的,除了看起来简洁些,内存消耗还是没改进。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int N = strs.size();
if(N == 0)
return "";
if(N == 1)
return strs[0];
if(strs[0].length() == 0 ){
return "";
}
string s;
int count = 0;
int tmp = 0;
for(int i=0; i<strs[0].length(); i++){
tmp = 0;
for(int k = 1; k<strs.size(); k++){
if(strs[0][i] != strs[k][i]){
tmp=1;
return s;
}
}
s.push_back(strs[0][i]);
}
return s;
}
};
再去看看大神的
看了看题解,跟不上了,就这样吧