今天做了两个easy,一个medium,都比较简单。
1.leetcode58
我的代码:
class Solution {
public:
int lengthOfLastWord(string s) {
int last_length = 0;
int cur_length = 0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
cur_length++;
last_length=cur_length;
}else if(cur_length!=0){
last_length=cur_length;
cur_length=0;
}else{
cur_length=0;
}
}
return last_length;
}
};
其实直接从尾部开始遍历更快,找从尾部开始的第一个单词即可。下面有一题就是从尾部开始遍历的。
2.leetcode14
这一题是个easy题,我的解法也很暴力:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int i=0;
int flag=0;
string ans;
for(i=0;i<strs[0].size();i++){
for(int j=1;j<strs.size();j++){
if(strs[0][i]!=strs[j][i]){
flag =1;
break;
}
}
if(flag==1){
break;
}
}
for(int k=0;k<i;k++){
ans.push_back(strs[0][k]);
}
return ans;
}
};
搜了一下,并没有什么时间复杂度更低的算法…
class Solution {
public:
string reverseWords(string s) {
int n=s.size();
int start=n-1;
int end=n-1;
int i=n-1;
string ans;
while(i>=0){
if(s[i]!=' '){
start=i;
end=i;
for(int j=i-1;j>=0;j--){
if(s[j]!=' '){
start--;
}else{
break;
}
}
for(int k=start;k<=end;k++){
ans.push_back(s[k]);
}
ans.push_back(' ');
i=start-1;
}else{
i--;
}
}
ans.pop_back();
return ans;
}
};
two pointers的思想。