2017-06-15 178 views
-1
func lengthOfLongestSubstring(s string) { 
    match := make(map[string]int) 
    var current string 

    current = s[0] 

    if match[current] == 1 { 
     /// 
    } 

} 

为什么我会收到错误cannot use s[0] (type byte) as type string in assignment?据我所知,s的类型为string,为什么访问一个字符会将它变成byte获取字符串索引

+2

是否铸造s [0]串工作? – DJSweetness

+2

,因为's [0]'是一个'byte',而不是'string'。你确定你只想按字节操作还是应该用utf8符文工作? – JimB

+0

@JimB我只是想检索字符,所以我可以用它作为地图上的一个键 – chefcurry7

回答

1

让我们读golang官方家伙怎么看串中去(https://blog.golang.org/strings):

在围棋中,字符串实际上是字节只读片。如果您完全不确定字节的片断是什么或者它是如何工作的,请阅读上一篇博文;我们会假设你有。

事先声明一个字符串保存任意字节是很重要的。不需要保存Unicode文本,UTF-8文本或任何其他预定义的格式。就字符串的内容而言,它完全等价于一个字节片。

因此,显然在你的情况下,s [0]是一个字节类型,如果你真的需要赋值,你需要明确的情况。

1
func lengthOfLongestSubstring(s string) { 
    strArr:=[]rune(s) 
    fmt.Println(string(strArr[0])) 

}