字符串中相同字母的最大距离,如字符串abcda为4 为了使得时间复杂度为O(N)需要使用unordered_map解决问题,代码如下,注释部分为解释说明:
int maxDis(vector<int>& blocks)
{
int res = 0;
unordered_map<int, int>m;
for (int i = 0; i < blocks.size(); i++)
{
cout << "m.count(blocks[i]) " << m.count(blocks[i]) << " " << endl;
//使用unordered_map对象查找键中是否有相同元素,如果有查看距离(下标i相减)此时对m[值]不进行赋值。如果没找到,重新对m[值]进行赋值i
if (m.count(blocks[i]))
{
res = max(res, i - m[blocks[i]]);
//m[blocks[i]] = i;//实验确定不跳过会重新赋值,对前面已存在的值会覆盖
}
else {
m[blocks[i]] = i;
}
cout << " " << m[blocks[i]] << endl;
}
return res == 0 ? -1 : res;
}