1. 程式人生 > >經典面試題golang實現方式(一)

經典面試題golang實現方式(一)

以下所有題目的關鍵資訊都會用【】括起來,我們不對題目進行分析,只給出題目的解決方案;如有疑問請不吝賜教。

題目:
請實現一個演算法,確定一個字串的所有字元【是否全都不同】。這裡我們要求【不允許使用額外的儲存結構】。給定一個string,請返回一個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為【ASCII字元】。字串的長度小於等於【3000】。

程式碼實現:

package main

import (
    "fmt"
    "strings"
)

func isUniqueStr(s string) bool {
    if len([]rune
(s)) > 3000 { return false } for _, v := range s { if v > 127 { return false } if strings.Count(s, string(v)) > 1 { return false } } return true } func main() { s1 := "aeiou" fmt.Println(isUniqueStr(s1)) s2 := "BarackObama"
fmt.Println(isUniqueStr(s2)) }

執行結果:

true

false

題目:
請實現一個演算法,在不使用【額外資料結構和儲存空間】的情況下,翻轉一個給定的字串(可以使用單個過程變數)。
給定一個string,請返回一個string,為翻轉後的字串。保證字串的長度小於等於5000。

程式碼實現:

package main

import (
    "fmt"
)

func reverString(s string) (string, bool) {
    str := []rune(s)
    len := len(str)
    if len
> 5000 { return string(str), false } for i := 0; i < len/2; i++ { str[i], str[len-1-i] = str[len-1-i], str[i] } return string(str), true } func main() { s1 := "This is golang" fmt.Println(reverString(s1)) s2 := "gnalog si sihT" fmt.Println(reverString(s2)) }

執行結果:

gnalog si sihT  true

This is golang  true

題目:
給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。這裡規定【大小寫為不同字元】,且考慮字串重點空格。給定一個string s1和一個string s2,請返回一個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。

程式碼實現:

package main

import (
    "fmt"
    "strings"
)

func isRegroup(s1, s2 string) bool {
    if len([]rune(s1)) != len([]rune(s2)) {
        return false
    }
    for _, v := range s1 {
        if strings.Count(s1, string(v)) != strings.Count(s2, string(v)) {
            return false
        }
    }
    return true
}

func main() {
    s1 := "This is golang"
    s2 := "gnalog si sihT"
    fmt.Println(isRegroup(s1, s2))

    s3 := "Here you are"
    s4 := "Are you here"
    fmt.Println(isRegroup(s3, s4))

    s5 := "This is golang1.1"
    s6 := "This is golang1"
    fmt.Println(isRegroup(s5, s6))
}

執行結果:

true

false

false

題目:
請編寫一個方法,將字串中的空格全部替換為“%20”。假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度(小於等於1000),同時保證字串由【大小寫的英文字母組成】。給定一個string為原始的串,返回替換後的string。

程式碼實現:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func replaceBlank(s string) (string, bool) {
    if len([]rune(s)) > 1000 {
        return s, false
    }
    for _, v := range s {
        if string(v) != " " && unicode.IsLetter(v) == false {
            return s, false
        }
    }
    return strings.Replace(s, " ", "%20", -1), true
}

func main() {
    s1 := "Hello World"
    fmt.Println(replaceBlank(s1))

    s2 := "Hello,World"
    fmt.Println(replaceBlank(s2))
}

執行結果:

Hello%20World   true

Hello,World     false