无反复字符的最长子串——滑动窗口+哈希

一刷:https://segmentfault.com/a/11...

二刷https://leetcode-cn.com/probl...

func lengthOfLongestSubstring(s string) int {    var n = len(s)    if n <= 1 {        return n    }    var maxLen = 1    var left, right, window = 0, 0, [128]int{}    for right < n {        var rightChar = s[right]        var rightCharIndex = window[rightChar]        if rightCharIndex > left {            left = rightCharIndex        }        if right - left + 1 > maxLen {            maxLen = right - left + 1        }        window[rightChar] = right + 1        right++    }    return maxLen}

成果

反转字符串中的元音字母

简略高级的思路,遍历字符串记录元音字符索引,依据索引进行转换

func reverseVowels(s string) string {    var index []int    for i,v:=range s{        switch v {        case 'a','e','i','o','u','A','E','I','O','U':index=append(index,i)        }    }    b:=[]byte(s)    for i:=0;i<len(index)/2;i++{        index1:=index[i]        index2:=index[len(index)-i-1]        b[index1],b[index2]=b[index2],b[index1]    }    return string(b)}

成果

用双指针取代数组节俭空间应用

func reverseVowels(s string) string {    b:=[]byte(s)    index1,index2:=0,len(b)-1    for index1<index2{        for isVowel(b[index1]) && index1 < len(b)-1 {            index1++        }        for isVowel(b[index2]) && index2 > 0 {            index2--        }        if index1<index2{            b[index1],b[index2]=b[index2],b[index1]            index1++            index2--        }    }    return string(b)}func isVowel(s byte)bool{    if s=='a'||s=='e'||s=='i'||s=='o'||s=='u'||s=='A'||s=='E'||s=='I'||s=='O'||s=='U'{        return false    }    return true}

参考官解可知

func reverseVowels(s string) string {    t := []byte(s)    n := len(t)    i, j := 0, n-1    for i < j {        for i < n && !strings.Contains("aeiouAEIOU", string(t[i])) {            i++        }        for j > 0 && !strings.Contains("aeiouAEIOU", string(t[j])) {            j--        }        if i < j {            t[i], t[j] = t[j], t[i]            i++            j--        }    }    return string(t)}作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/solution/fan-zhuan-zi-fu-chuan-zhong-de-yuan-yin-2bmos/起源:力扣(LeetCode)著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

学习到字符串strings包的一个函数

后果如下

赎金信

字符统计——哈希表

func canConstruct(ransomNote string, magazine string) bool {    m:=make(map[rune]int)    for _,v:=range magazine{        m[v]++    }    for _,v:=range ransomNote{        if m[v]==0{return false}        m[v]--    }    return true}

成果

func canConstruct(ransomNote string, magazine string) bool {    m:=make(map[rune]int)    for _,v:=range magazine{        m[v]++    }    for _,v:=range ransomNote{        if m[v]==0{return false}        m[v]--    }    return true}

成果