class Solution {
public:
vector<string> getFolderNames(vector<string>& names) {
vector<string> ret;
map<string,int> index;
for(auto & x:names)
{
if(index.count(x))//存在同名
{
int k=index[x];
while(index.count(x+"("+to_string(k)+")")) k++;//对新文件名的后缀不断增加直到找不到重复的
ret.push_back(x+"("+to_string(k)+")");//添加后缀后插入
index[x]=k+1;//老映射的value+1
index[x+"("+to_string(k)+")"]=1;//新映射为1
}
else
{
ret.push_back(x);
index[x]=1;//这一句赋值就直接对map插入了对组<x,1>
}
}
return ret;
}
};
/*
mapped_type& operator[] (const key_type& k);
如果 k 与容器中元素的键匹配,则该函数返回对其映射值的引用。
如果 k 与容器中任何元素的键不匹配,则该函数将插入具有该键的新元素,并返回对其映射值的引用。
*/
while(index.count(x+“(”+to_string(k)+“)”) )
{
k++;
}
是有必要的,因为index.count()通过键值映射找到对应的值,如果之前出现str,str(1)那么没有继续向后寻找的话就会出现,所添加的新串依然出现重复,要对后缀从k开始不断增加,直到找到一个没有重复的,这个后缀也是能保证文件名唯一的最小正整数