1.首先,按照上面给出的输入输出案例,我们知道,得到的输出结果字符串result长度是不固定的,这取决于输入字符串str,因此要将结果存储在StringBuffer字符串sb中(长度可变的缓冲区字符串)。
2.思路:我们要拿出str中每一个字符进行判断,因此for循环依次遍历字符串,需要使用str.charAt(int index)方法拿出每一个字符c;问题关键在于如何判断呢?
以输入“abbbcccd”为例,我们可以使用indexOf(char ch)、lastIndexOf(char ch)进行等值比较。若该字符的第一个索引位置和最后一个索引位置相同,则表示该字符只出现一次,将该字符存入sb中,比如‘a’;若该字符的第一个索引位置和最后一个索引位置不同,则表示该字符至少出现两次,比如‘b’,因为我们只要存第一个‘b’即可,所以当str.indexOf(c)==i时,将该字符存入sb中,否则不存储。字符’c’和字符‘d’操作同上。
1.时间复杂度O(N),额外空间复杂度O(1)。
import java.util.*;
public class Solution {
/**
-
去除字符串中的重复字符
-
@param str string字符串