题目
官方解
1.水平扫描法
思路:
LCP(S1...Sn)=LCP(LCP(LCP(S1,S2),S3),...Sn)
求2个字符串的最长前缀一般来说是每个字符串从头比较到尾,直到不相等为止。
但假如是n个字符串之间的比较的话,为了避免每次比较从头到尾进行,可以根据如上述公式,
- 选取一个字符串A作为前缀,长度为k;
若该字符串A与另一个B的前k字符串不同;
则去掉一个字符串A中的末尾字符,形成新字符串A′,
与串B比较直至满足前缀完全相等的情况;
再将得到的最大公共前缀与串C,...,N比较,按上述循环进行,直至满足条件。
1 | class Solution { |
同时可以用s_0.pop_back();
或者 s_0.erase(s_0.size() - 1);
替换掉 s_0 = s_0.substr(0, s_0.size() - 1)