两种方法

第一种利用了golang的map数据结构,去除的字符串顺序无法保证,第二种可以保证

1

func chazhao(str string) string {

	x := make(map[string]int, len(str))
	for i := 0; i < len(str); i++ {
		x[fmt.Sprintf("%c", str[i])] = i
	}
	i := ""
	for k, _ := range x {
		i += fmt.Sprint(k)
	}

	return i
}

2

func xun(str string) string {
	
	// 因为golang的字符串无法直接操作,所以先将其存在一个切片中
	slice := make([]string, 0, len(str))
	for i := 0; i < len(str); i++ {
		slice = append(slice, str[i:i+1])
	}
	// 遍历切片,
	// 当前元素与其后面元素组成的切片进行比较
	// eg,  waddax  --> w [addax]
	// 当此元素存在元后面切片中时,将后面的位置置为""
	for i := 0; i < len(slice); i++ {
		// 如果为空,直接跳过,减少流程
		if slice[i] == "" {
			continue
		}
		if i == len(slice)-1 { 
		// 当为最后一个元素是直接返回,因为不用比较了,前面没有相同的
		// 后面也没有元素,直接退出
			break
		}
		for k, v := range slice[i+1:] {
			if slice[i] == v {
				slice[i+k+1] = ""  // i+k+1 为后面切片当中的相同元素在本身切片当中的位置
			}
		}
	}
	// 将 生成的切片中的空白去掉 组成新字符串返回
	s := ""
	for _, v := range slice {
		if v == "" {
			continue
		}
		s += fmt.Sprint(v)
	}
	return s
}

第二种方法过程展示

func main() {
	xun("abcasxdeabec")
}
--> a [b c a s x d e a b e c]
--> b [c  s x d e  b e c]
--> c [ s x d e   e c]
--> s [x d e   e ]
--> x [d e   e ]
--> d [e   e ]
--> e [  e ]
第一列就是没有重复的数字了
abcsxde