无反复字符的最长子串——滑动窗口+哈希
一刷: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}
成果