1. 程式人生 > >go判斷兩個字串是否是是相互打亂的,也就是說它們有著相同的字元,但 是對應不同的順序。

go判斷兩個字串是否是是相互打亂的,也就是說它們有著相同的字元,但 是對應不同的順序。

package main

import (
	"fmt"
	"strings"
	"unicode/utf8"
)

func main() {
	fmt.Println(string([]rune("starting chat...")[2]))
	fmt.Println(string([]rune("你好,世界!")), []byte("你好,世界!"))
	fmt.Println("你好,世界!"[:2], "hello,world!"[:2], []rune("你好,世界"))
	fmt.Println("\\", utf8.RuneCountInString("你好,世界!"))
	fmt.Println(string(1234567))
	fmt.Println("------------------------------------------------")

	str1 := "abcdefgw我habc"
	str2 := "ebadcgfh我cbaw"

	// fmt.Println(RemoveTheSame(str1))
	fmt.Println(IsSame(str1, str2))

}

// slice去重處理
func RemoveTheSame(s string) string {
	s1 := []string{}
	m := make(map[int]string)
	for _, v := range s {
		m[int(v)] = "ok"
	}
	for k, _ := range m {
		s1 = append(s1, string(k))
	}
	return strings.Join(s1, "")
}

// 判斷2個字串所含的字元及數量相同
func IsSame(str1 string, str2 string) bool {
	count := 0
	number := 0
	str3 := RemoveTheSame(str1)
	str4 := RemoveTheSame(str2)
	if len(str3) == len(str4) {
		for _, v := range []rune(str3) {
			if strings.Contains(str4, string(v)) {
				count++
			}
		}
	}
	if count == len([]rune(str3)) {
		for i := 0; i < len([]rune(str3)); i++ {
			if strings.Count(str1, string([]rune(str3)[i])) == strings.Count(str2, string([]rune(str3)[i])) {
				number++
			}
		}
	}
	if number == len([]rune(str3)) {
		return true
	}
	return false
}
自己寫了2個函式才做出來,不知道有沒有更簡潔的辦法。