我用的方法是,同时保存每个 string 的begin 迭代器,让他们一起移动,然后统一比较,若是不同,或其中有的已经到了 end() ,那么就返回。否则所有的迭代器共同前进一步。
string longestCommonPrefix(vector<string>& strs) { if (strs.empty()){ return string(); } vector<string::iterator> its; for_each(strs.begin(), strs.end(), [&](string& s){its.push_back(s.begin());}); const auto len = its.size(); for (;;){ const auto key = *its[0]; for (size_t i = 0; i != len; ++i){ if (its[i] == strs[i].end() || *its[i] != key){ return string(strs[i].begin(), its[i]); } } for_each(its.begin(), its.end(), [](string::iterator& it){++it;}); } }
时间: 2024-11-03 07:34:42