Golang文字列から重複文字を除去

8326 ワード

二つの方法
1つ目はgolangのmapデータ構造を利用しており,除去された文字列の順序は保証されず,2つ目は保証できる.
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
}

第2の方法の過程は展示します
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