Golang 去除字符串中的重複字符

兩種方法

第一種利用了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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章