编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
输入: ["flower","flow","flight"]
输出: "fl"
这次大概是我第一次,比较顺利的coding出来的题目。
但是被string的一个陌生语法坑了一个小时
先上代码
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int n = strs.size();
string maxL;
char s = '\0';
if(n == 0) return "";
if(n == 1) return strs[0];
for(auto c : strs[0])
{
for(int i = 1; i < n; i++)
{
if(strs[i].empty()) {s='\0'; break;}
s = strs[i][0];
if(s != c) {s='\0'; break;}
else strs[i].erase(0,1);
}
if(s != '\0' && c == s)
{
maxL += s;
}
else
break;
}
return maxL;
}
};
主要是string.erase()函数的用法
#include <iostream>
#include <string>
int main ()
{
std::string str ("This is an example sentence.");
std::cout << str << '\n';
// "This is an example sentence."
str.erase (10,8); // ^^^^^^^^
std::cout << str << '\n';
// "This is an sentence."
str.erase (str.begin()+9); // ^
std::cout << str << '\n';
// "This is a sentence."
str.erase (str.begin()+5, str.end()-9); // ^^^^^
std::cout << str << '\n';
// "This sentence."
return 0;
}
如果()中间放两个参数,就是删除中间一段;如果只放一个,就是删除该数字往后的所有。
我的问题是没注意这个语法的使用规则,想删除第一个字符,结果写成str.erase(0),删除了所有
网友评论