242. 給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞。

//242. 給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞。
//
//示例 1:
//
//輸入: s = "anagram", t = "nagaram"
//輸出: true
//示例 2:
//
//輸入: s = "rat", t = "car"
//輸出: false
//說明:
//你可以假設(shè)字符串只包含小寫字母。
//
//來源:力扣(LeetCode)

func main(){

    cases := []struct{
        s string
        t string
    }{
        {s:"anagram",t:"nagaram"},
        {s:"rat",t:"car"},
    }
    for _, v := range cases {
        result := isAnagram(v.s,v.t)
        log.Println("isAnagram result:",result)
    }
    for _, v := range cases {
        result := isAnagram2(v.s,v.t)
        log.Println("isAnagram2 result:",result)
    }

}

// 計(jì)數(shù)器數(shù)表進(jìn)行比較
func isAnagram2(s,t string)  bool {
    defer timeCost()()
    if len(s) != len(t) {
        return false
    }
    var counter [26]byte
    for _, ch := range s {
        counter[ch-'a']++
    }
    // 如果使用byte -- 溢出 255
    // 使用int8 -- 等于 -1  條件判斷 < 0
    for _, ch := range t{
        counter[ch-'a']--
        if counter[ch-'a'] > byte(len(s)){
            return false
        }
    }

    return true
}
// 先排序后進(jìn)行比較
func isAnagram(s ,t string) bool{
    if len(s) != len(t) {
        return false
    }
    s = sortString(s)
    t = sortString(t)
    return strings.Compare(s,t) == 0
}
func sortString(w string) string {
    s := strings.Split(w, "")
    sort.Strings(s)
    return strings.Join(s, "")
}
func timeCost() func() {
    start := time.Now()
    time.Sleep(time.Nanosecond*100)
    return func() {
        fmt.Printf("time cost = %v\n", time.Since(start))
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容