亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據地圖中的索引打印每個元素字符串及其頻率-Golang

如何根據地圖中的索引打印每個元素字符串及其頻率-Golang

Go
www說 2023-01-03 11:14:02
假設我有輸入和輸出字符串,其中輸出將是字符串中每個元素的頻率和 char 本身input := "programming"output := "p2ro2ga2min"找到不同字符的頻率后,如何根據索引打印它這是我的代碼func countFreq(s string)  {    sMap := make(map[string]int)    for _, v := range s {        sMap[string(v)]++    }    for i, v := range sMap {        fmt.Printf("%v%v", i, v)    }    // Don't know what to do next}The output of code is output: n1p1r2o1g2a1m2i1
查看完整描述

2 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

這是我之前想到但剛剛開始寫作的替代方案。


它使用字符串來跟蹤符文順序,但如果速度很重要,您可以使用字符串生成器。


func countFreq(s string) {

    sMap := make(map[rune]int)

    sOut := ""


    for _, c := range s {

        sMap[c]++

        if sMap[c] == 1 {

            sOut += string(c)

        }

    }


    for _, c := range sOut {

        if sMap[c] > 1 {

            fmt.Print(sMap[c])

        }

        fmt.Printf("%c", c)

    }

}


查看完整回答
反對 回復 2023-01-03
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您正在計算runes,因此使用 的映射map[rune]int,這樣您就可以忽略返回到 的轉換string。


地圖是無序的,因此如果您希望輸出與輸入的順序相同,則不能(不應該)遍歷地圖。


一旦你計算了字母,再次在輸入字母上進行范圍,并從地圖中獲取頻率,并將其刪除。如果計數大于 1,也打印該數字。


func countFreq(s string) {

    sMap := make(map[rune]int)


    for _, v := range s {

        sMap[v]++

    }


    for _, v := range s {

        count := sMap[v]

        if count == 0 {

            continue // Char already printed and removed

        }

        delete(sMap, v)

        if count > 1 {

            fmt.Print(count)

        }

        fmt.Print(string(v))

    }

}

測試它:


for _, s := range []string{"programming", "ab", "aba", "aabcdeac"} {

    fmt.Println("In:", s)

    fmt.Print("Out: ")

    countFreq(s)

    fmt.Println()

}

這將輸出(在Go Playground上嘗試):


In: programming

Out: p2ro2ga2min

In: ab

Out: ab

In: aba

Out: 2ab

In: aabcdeac

Out: 3ab2cde


查看完整回答
反對 回復 2023-01-03
  • 2 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號