我首先想到的方法就是暴力匹配法,刚开始我自己写的代码长这样,运行结果是错误的 。发现是循环的控制变量不对,导致计算结果出错。应该比较所有的vec[i][0],vec[i][1]......,而不是比较vec[0][j],vec[1][j]......。就是应该让i先遍历一圈,再遍历j。有思路但是不会写。
代码
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
vector<string> vec;
vec.push_back("abdower");
vec.push_back("abdowt");
vec.push_back("abdight");
/*vec.push_back("dog");
vec.push_back("racecar");
vec.push_back("car");*/
for (auto c : vec)
{
cout << c << ", ";
}
if (!vec.empty())
{
for (int i = 0; i < vec.size(); ++i)
{
for (int j = 0; j < vec[i].size(); ++j)
{
if (vec[i][j] != vec[i+1][j])
{
cout << " ";
return -1;
}
else
cout << vec[i][j];
/*while (vec[i][j] == vec[i + 1][j])
{
{
cout << vec[i][j];
++j;
}
++i;
}*/
}
}
}
return 0;
}
直到看见题解中的暴力匹配法
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
for (int i = 0; 1; ++ i)
for (int j = 0; j < strs.size(); ++ j)
if (!(i < strs[j].size() && strs[j][i] == strs[0][i]))
return strs[0].substr(0, i);
}
};
尤其是这一行,瞬间懂了怎样修改遍历顺序
for (int i = 0; 1; ++ i)