记录LeetCode第三天( Longest Common Prefix)
1. 题目
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 “”.
2. 例子
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.
补充例子(我理解错误而导致输出错误时给的例子)
input:[]
output: “”
input:[“a”]
output: “a”
3. 代码
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int n=0;
string p = "";
int j=0;//j为vector中string的序号
for(int i =0; j<strs.size() && strs[j][i]!='\0'; ++i )//i是string中字符的序号
{
while(j<strs.size())
{
if(j==0 || strs[j][i] == strs[j-1][i])//当j为0或者连续两个string里第i个字符相同
j++;//自增,用于比较下一组
else
return p; //只要有一组不相等直接返回当前数组
}
p= p + strs[0][i];//全部string中第i个值都相等时,输出字符串加上这个字符。
j = 1;//如果vector里面只有一个strnig不会再进for循环,所以直接定义j=1
}
return p;
}
};
速度还好,但是占内存超多。
然后继续看讨论区某大大(withacup)的代码,emmmmm…还有好多要学呀。。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size() == 0) return "";
int i = -1;
while(strs[0][++i])
for(int j = 0;j < strs.size();j++)
if(strs[j][i] != strs[0][i]) return strs[0].substr(0,i);
return strs[0].substr(0,i);
}
};
4. strs[0].substr(0,i)
看啦一个 https://blog.csdn.net/sunshihua12829/article/details/50484966 的厉害的讲解,里面例子超棒。
这样的话,上面代码里就返回的是从strs[0]
中0
位开始直到i
位置的字符串。如果没有后面的i
就直接返回到了最后一位。
如果我好好刷题希望能录到人工智能,不想学通信了。