[344].反转字符串
题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html
思路 用不了库函数 go没 自己写,简单的反转 go中可以连续赋值 不用写函数很简单
func reverseString(s []byte) {
left,right:=0,len(s)-1
for left < right {
s[left],s[right] = s[right],s[left]
left++
right--
}
}
[541].反转字符串 II
题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html
思路 反转字符串 这个判断的条件没有想清楚 i+=2*k 这需要自己模拟一下 其他的还算个基础题
func reverseStr(s string, k int) string {
ss :=[]byte(s)
for i := 0; i < len(ss); i+=2*k {
if i+k < len(ss){
reverseString(ss[i:i+k])
}else{
reverseString(ss[i:])
}
}
return string(ss)
}
func reverseString(s []byte) {
left,right:=0,len(s)-1
for left < right {
s[left],s[right] = s[right],s[left]
left++
right--
}
}
剑指Offer 05.替换空格
题目链接/文章讲解:https://programmercarl.com/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.html
思路:切片添加遇到就加上%20
字符串连接, 字符串不可变但是可以连接,先创建一个空字符串然后把需要的接上 遇到空格+ %20就行
//切片添加
func replaceSpace(s string) string {
ss:= []byte(s)
result:= make([]byte,0)
for i:=0;i<len(ss);i++{
if ss[i]==' ' {
result = append(result,[]byte("%20")...)
}else{
result = append(result,ss[i])
}
}
return string(result)
}
//字符串连接
func replaceSpace(s string) string {
str :=""
for _,v := range s{
if string(v)!=" "{
str+=string(v)
}else{
str+="%20"
}
}
return str
}
[151].反转字符串中的单词
题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html
思路:反转好写 但是这个去除空格不好写,第一个if slow只是为了在第一个单词前不加空格,其他的是覆盖 ,一直覆盖到空格的位置,然后 if slow !=0 这里就会给后面加个空格 然后继续覆盖 本题自己写了一半 ,但是后来写完才知道难点是空格
func reverseWords(s string) string {
ss:=[]byte(s)
slow := 0
for i := 0; i < len(ss); i++ {
if ss[i]!=' '{
if slow != 0 {
ss[slow]=' '
slow++
}
for i<len(ss)&&ss[i]!=' ' {
ss[slow] = ss[i]
slow++
i++
}
}
}
ss=ss[0:slow]
j:=0
reverseString(ss)
for i := 0; i < len(ss); i++ {
if ss[i]== ' '{
reverseString(ss[j:i])
j=i+1
}else if i==len(ss)-1{
reverseString(ss[j:i+1])
}
}
return string(ss)
}
func reverseString(s []byte) {
left,right:=0,len(s)-1
for left < right {
s[left],s[right] = s[right],s[left]
left++
right--
}
}
剑指Offer58-II.左旋转字符串
//这种方法简单但没含金量
func reverseLeftWords(s string, n int) string {
return s[n:len(s)]+s[:n]
}
//反转三次 , 0-n n-end 0-end 就能有左旋字符串的效果
// 123456
//目标 345612
//先反转前n个 213456
//再反转n到end 216543
//反转全部 345612
func reverseLeftWords(s string, n int) string {
ss:=[]byte(s)
reverseString(ss[0:n])
reverseString(ss[n:len(ss)])
reverseString(ss)
return string(ss)
}
func reverseString(s []byte) {
left,right:=0,len(s)-1
for left < right {
s[left],s[right] = s[right],s[left]
left++
right--
}
}
总结
今天的题不算难 但是字符串写法挺复杂的,这个感觉得多练练