本文主要总结一个删除字符串中第一个重复的指定字符的左边所有字符函数,简单来说,就是比如字符串“abcbefg”,比如我要删除第一个重复字符'b'左边所有字符,也就是要删除字符串“abcbefg”中的字符“ab”,剩下的字符是“cbefg”。
该问题的解决方法,博主在leecode看到一个非常精妙的解法,代码如下:
int left = 0;
string s = {abcbdefg};
unordered_set<char> lookup = {abcb};
while (lookup.find(s[i]) != lookup.end())
{
lookup.erase(s[left]); //依次从字符串左边开始删除,left下标,直到删除完第一个重复字符s[i]截止
left ++; //依次向右取s字符串中的字符
}
上述代码中,集合查找函数unordered_set::find('b')找的是该字符串中,第一个出现字符'b'的迭代器标志,如果找到,则返回对应迭代器标志,否则返回unordered_set::end()。利用这个性质,可以依次删除集合左边的字符,直到找不到该字符,则说明删除了从左边到右边第一个指定字符内容。其中,删除函数unordered_set::erase('a')功能是删除字符集中第一个字符。
参考内容:
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai/(参考:删除指定字符左边所有字符)