題目:
請實現一個算法,確定一個字符串的所有字符【是否全都不同】。這里我們要求【不允許使用額外的存儲結構】。給定一個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