【代码随想录Day8-10】字符串

344.反转字符串

让j代表左边,i代表右边

然后开始互换即可 

func reverseString(s []byte)  {
   n:=len(s)
   j:=0
   for i:=n-1;i>0;i--{       
       if (j<i){
           temp:=s[i]
           s[i]=s[j]
           s[j]=temp
           j++
       }
   }
}
func reverseString(s []byte)  {
   left:=0
    right:=len(s)-1
    for left<right{
        s[left],s[right]=s[right],s[left]
        left++
        right--
    }
}

 

541. 反转字符串II

力扣题目链接(opens new window)

给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

#

 Go语言遍历字符串 一般可以把string转化成[]byte{}数组

其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。再用slice就可以解决了

 

func reverseStr(s string, k int) string {

    ss := []byte(s)
    length:=len(s)
    for i:=0;i<length;i+=2*k {
       if  i+k <= length {
           reverseString(ss[i:i+k])
       } else {
           reverseString(ss[i:length])
       }
    }
    return string(ss)
}

func reverseString(s []byte)  {
   left:=0
    right:=len(s)-1
    for left<right{
        s[left],s[right]=s[right],s[left]
        left++
        right--
    }
}

 

题目:剑指Offer 05.替换空格

力扣题目链接(opens new window)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1: 输入:s = "We are happy."
输出:"We%20are%20happy."

#

最高性能方法,原地修改

func replaceSpace(s string) string {
    b := []byte(s)
    length := len(b)
    spaceCount := 0
    // 计算空格数量
    for _, v := range b {
        if v == ' ' {
            spaceCount++
        }
    }
    // 扩展原有切片
    resizeCount := spaceCount * 2
    tmp := make([]byte, resizeCount)
    b = append(b, tmp...)
    i := length - 1
    j := len(b) - 1
    for i >= 0 {
        if b[i] != ' ' {
            b[j] = b[i]
            i--
            j--
        } else {
            b[j] = '0'
            b[j-1] = '2'
            b[j-2] = '%'
            i--
            j = j - 3
        }
    }
    return string(b)
}

 

151.翻转字符串里的单词

力扣题目链接(opens new window)

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:
输入: "the sky is blue"
输出: "blue is sky the"

示例 2:
输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

先上一个自己写的方法:

func reverseWords(s string) string {

	ss := []byte(s)
	fmt.Println(ss)
	m := map[int]string{}
	j := 0
	temp := ""
	for i := len(ss) - 1; i >= 0; i-- {

		if ss[i] != ' ' {
			temp += string(ss[i])
			if i == 0 {
				j++
				btmp := []byte(temp)
				reverseString(btmp)
				m[j] = string(btmp)
			}

		} else {
			if len(m[j]) == 0 && i != len(ss)-1 && ss[i+1] != ' ' {
				btmp := []byte(temp)
				reverseString(btmp)
				m[j] = string(btmp)
				temp = ""
				j++
			}
		}

	}
	fmt.Println(m)
    var str string
    keys := make([]int, 0)
    for k, _ := range m {
        keys = append(keys, k)
    }
    sort.Ints(keys)
    for q, k := range keys {
        str += m[k]
        if q != len(keys) -1 {
            str += " "
        }
    }
    return str
	

}

func reverseString(s []byte) {
	left := 0
	right := len(s) - 1
	for left < right {
		s[left], s[right] = s[right], s[left]
		left++
		right--
	}
}

 这个方法主要就是从尾部开始遍历,遇到空格,就把前面的词保存起来。用map。需要主要到最后一个单词的条件判断以及多个空格的条件判断,当然还有一个就是go map的特性,遍历的时候,排序是随机的,需要把key先用slice排序一下,再根据key的顺序,遍历map,最后字符串拼接。后面再补上大佬的写法

#题目:剑指Offer58-II.左旋转字符串

力扣题目链接(opens new window)

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

限制:
1 <= k < s.length <= 10000

#

func reverseLeftWords(s string, n int) string {
    ss := []byte(s)
	sub1 := ss[0:n]
	sub2 := ss[n : len(ss)-1]
	sub3 := ss[len(ss)-1]

    var str []string
	str = append(str, string(sub2), string(sub3), string(sub1))
	return strings.Join(str, "")
}

 

28. 实现 strStr()

力扣题目链接(opens new window)

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2

示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1

说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

KMP算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值