两种方法
第一种利用了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