本文主要总结一个删除字符串中第一个重复的指定字符的左边所有字符函数,简单来说,就是比如字符串“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/(参考:删除指定字符左边所有字符)
本文主要总结一个删除字符串中第一个重复的指定字符的左边所有字符函数,简单来说,就是比如字符串“abcbefg”,比如我要删除第一个重复字符'b'左边所有字符,也就是要删除字符串“abcbefg”中的字符“ab”,剩下的字符是“cbefg”。该问题的解决方法,博主在leecode看到一个非常精妙的解法,代码如下:int left = 0;string s = {abcbdefg};un...
删除字符串中重复的字符,例如,”good”去掉重复的字符串后就变成”god”。
第一种方法:
“蛮力法”,最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为’\0’,最后再把这个字符数组中所有的’\0’去掉,此时得到的字符串就是删除重复字符后的目标字符串。
代码如下:package 删除字符
2,算法思想
利用滑动窗口思想解题,创建一个字符c串容器 记作B,来存放找到的最大不重复子串;利用 递归循环来对原字符串字符进行逐个搜索,搜索过程中存在两种情况发生
如果当前搜索到的字符 a 不存在 B 中,则将字符 a 插入B 后面;
定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”。具体要求如下:
(1)私有数据成员。
char *s1:指向原字符串。
char *s2:指向结果字符串。
(2) 公有成员函数。
DelSameStr(char *s):构造函数,动态分配
定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”。具体要求如下:
(1)私有数据成员。
char *s1:指向原字符串。
char *s2:指向结果字符串。
(2) 公有成员函数。
DelSameStr(char *s):构造函数,动态分配s1