无重复字符的最长子串——滑动窗口+哈希
一刷: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
}
效果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。