算法题-字符串3.22

wric

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

image.png

一刷: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
}

效果
image.png

反转字符串中的元音字母

image.png

简单初级的思路,遍历字符串记录元音字符索引,根据索引进行转换

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)
}

效果
image.png

用双指针取代数组节省空间使用

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包的一个函数
image.png
结果如下
image.png

赎金信

image.png

字符统计——哈希表

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
}

效果
image.png

image.png

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
}

效果
image.png

阅读 442
10 声望
3 粉丝
0 条评论
10 声望
3 粉丝
文章目录
宣传栏