最长公共前缀
刚学习了STL的关联容器,就用map做了一下,尤其是使用下表添加和统计元素,真的很简洁方便。
思路:设有n个字符串,从每个字符串的第一个字符开始比较,都相同,再开始比较下一个字符,直到碰见不相同或者是遇到一个字符串末尾,结束。
关键是如何来比较每个字符串的对应字符。我用的是map容器,我发现如果比较下来都相同,那么存入map后,该字符对应的值(就是在所有字符串中目前为止统计的次数)应该是n的整数倍。
//测试:[],[""],["a"],["aa","aa"],["aa","ab"]
//使用map来存储前缀和次数,严格按照strsde 顺序,从第一个字符开始添加到map中,如果前缀相同,
//在每次遍历结束,当前位置字符在map中的个数应该是strs长度的整数倍
//(之所以有1外其他的倍数,是因为存在["aa","aa"]这种情况)
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0)
return "";
string ret = "";
map<char, int> charMap;
int k = 0;
bool stop = false;
while (!stop)
{
char temp;
for (int i = 0; i<strs.size(); i++)
{
if (k >= strs[i].size())
{
stop = true;
return ret;
}
++charMap[strs[i][k]];
temp = strs[i][k];
}
if (charMap[temp] % strs.size() == 0)
{
ret = ret + temp;
k++;
}
else
stop = true;
}
return ret;
};