兩種方法
第一種利用了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