2020-06-19 LC-14最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

输入: ["flower","flow","flight"]
输出: "fl"
这次大概是我第一次,比较顺利的coding出来的题目。
但是被string的一个陌生语法坑了一个小时
先上代码

class Solution {
public:
    string longestCommonPrefix(vector& 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 
#include 

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),删除了所有

你可能感兴趣的:(2020-06-19 LC-14最长公共前缀)