目前有一个字符串(假设是a,b,c,a,a,b,b),要求:
1)删除重复的字符,仅保留一个(结果应该是:a,b,c)。
2)删除全部重复的字符(只要有重复,就删除,结果为:c)。
思路:
可以先用一个外循环逐个字符遍历——每次遍历一个字符的时候,判断是否还有其它相同字符(LastIndexOf):
对于1:删除其它相同的字符,直到全部删除干净。
对于2:在1的基础上,删除自身。同时因为当前元素被删除之后,后一个元素会替补上来,因此循环变量需要自减,代码如下:
/// <summary> /// 删除冗余字符串算法 /// </summary> /// <param name="elements">被操作字符串</param> /// <param name="flag">是否保留一个重复字符</param> static void RemoveDuplicatedElements(List<string> elements, bool flag) { for (int i = 0; i < elements.Count; i++) { int endIndex = elements.LastIndexOf(elements[i]); //扫描是否有重复字符 if (endIndex != i) { //不断扫描,删除,直到除去自身以外全部删除了 do { elements.RemoveAt(endIndex); endIndex = elements.LastIndexOf(elements[i]); } while (i != endIndex); //如果彻底删除重复字符,删除自身 if (!flag) { elements.RemoveAt(i); i--; } } } }