首页 > 编程语言 >代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字

代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字

时间:2024-07-24 14:57:25浏览次数:11  
标签:字符 ss 反转 随想录 字符串 byte 输入

题目:

344. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

思路:

1.两两交换,双指针一个指向头部,一个指向尾部,定义临时变量tmp存储中间值

算法:

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

}

注意:

两两交换,tmp做临时存储

题目:

541. 反转字符串 II

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

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

示例 1:

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

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104

思路:

1.以前一题两两交换为基础

2.以i遍历数组,每次跨度是2K,处理前k个字符

3.理解题目中剩余字符的处理,若i+k < length, 则前k个全部反转,若i+k>length,则反转i+length个元素

算法:

func reverseStr(s string, k int) string {
    //Bytes包中的bytes函数byte():将字符串转为字节数组
    ss := []byte(s)
    length := len(s)

    for i := 0; i < len(ss); i += 2*k {
        //剩余字符<length则全部反转
        if i + k < length {
            swap(ss[i:i+k])
        } else {
            swap(ss[i:length])
        }
    }
    return string(ss)

}

func swap(s []byte) {
    l, r := 0, len(s)-1
    for l < r {
        tmp := s[l]
        s[l] = s[r]
        s[r] = tmp
        l++
        r--
    }
}

注意:

1.字符串转换为字节数组方法:ss := []byte(s)

题目:

54. 替换数字(第八期模拟笔试)

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入:输入一个字符串 s,s 仅包含小写字母和数字字符。

输出: 打印一个新的字符串,其中每个数字字符都被替换为了number

输入&输出:

a1b2c3
anumberbnumbercnumber

数据范围:
1 <= s.length < 10000。

思路:

1.初始化s为切片数组,计算出s中数字字符,将s的长度进行扩充

2.双指针i,j 分别指向原s的尾部,和现s的尾部,i进行倒序遍历,遇到数字,则倒序将“number”覆盖写入s,最后i =0后中止循环

算法:

package main

import "fmt"

func main() {
    //s为字节数组
    var ss []byte
    fmt.Scanln(&ss)
    if len(ss) == 0 {
        return
    }
    
    // ss := []byte(s)
    size := len(ss)
    n := 0 

    for i := 0; i < size; i++ {
        if ss[i] >= '0' && ss[i] <= '9' {
            n++
        }
    }
    for i := 0; i < n ; i++ {
        ss = append(ss, []byte("     ")...)
    }
    //k指向扩张后的s数组的尾部
    target := []byte("number")
    // j指向原s数组的末尾,倒序遍历原s数组
    for i, j := size-1, len(ss)-1; i <= j && i >= 0 ; {
        if ss[i] >= '0' && ss[i] <= '9' {
            //倒序插入number
            for k, v := range target {
                ss[j-5+k] = v
            }
            j -= 6
            i--
        } else {
            ss[j] = ss[i]
            j--
            i--
        }
    }
    fmt.Println(string(ss))
    
}

注意:

1.s的初始化

2.语法:s的append,加入切片需要增加"..."

标签:字符,ss,反转,随想录,字符串,byte,输入
From: https://blog.csdn.net/peggy8023/article/details/140649753

相关文章

  • 代码随想录 day8 || 344 反转字符串 541 反转字符串|| 54 替换数字
    344反转字符串funcreverseString(s[]byte){ //思路思考双指针 left,right:=0,len(s)-1 forleft<right{ s[left],s[right]=s[right],s[left] left++ right-- }}//ez没啥好说的时间n/2=n空间1541反转字符串||funcreverseStr(sstring......
  • Day8 字符串part1
    任务344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。思路这道题比较简单,只需用双指针法交换头尾的值,然后往中间缩进即可。注意......
  • 代码随想录算法训练营第41天 |322.零钱兑换、279.完全平方数、139.单词拆分、多重背包
    322.零钱兑换https://leetcode.cn/problems/coin-change/description/代码随想录https://programmercarl.com/0322.零钱兑换.html#算法公开课279.完全平方数https://leetcode.cn/problems/perfect-squares/description/代码随想录https://programmercarl.com/0279.完全平......
  • 代码随想录算法训练营第40天 | 完全背包问题:完全背包基础理论、518.零钱兑换II、377.
    完全背包基础理论https://programmercarl.com/背包问题理论基础完全背包.html#其他语言版本卡码网完全背包例题https://kamacoder.com/problempage.php?pid=1052518.零钱兑换IIhttps://leetcode.cn/problems/coin-change-ii/description/代码随想录https://programmercarl......
  • Python查找字符串的CRC32
    我尝试获取字符串数据类型变量的CRC32,但出现以下错误:>>>message='helloworld!'>>>importbinascii>>>binascii.crc32(message)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:aby......
  • 如何将字符串转换为十进制数字?
    我有一个包含以下格式字符串的python列表:A1=['"29.0"','"65.2"','"75.2"']如何将这些字符串转换为十进制数字以对列表元素执行算术运算?可以使用float()函数将字符串转换为十进制数。以下是如何执行此操作的示例:A1=['"29.0"',�......
  • 代码随想录 day33 斐波那契数 | 爬楼梯 |使用最小花费爬楼梯
    斐波那契数斐波那契数解题思路利用代码随想录给出的解题模板进行解题。先确定dp数组和dp下标的含义,之后需要确定遍历的顺序,接着我们通过枚举获得遍历的规矩,最后确定dq的初始值。知识点动态规划心得第一次做动态规划,主要是掌握基本的解题思路,了解一下到底是怎么解决问题的......
  • 41-50题矩阵和字符串 在Java中,将大写字符转换为小写字符的方法主要有以下几种:
    20240723一、数组最后几个和字符串的两个448.找到所有数组中消失的数字(和645.错误的集合差不多)283.移动零118.杨辉三角119.杨辉三角II661.图片平滑器(没看懂)598.区间加法II566.重塑矩阵303.区域和检索-数组不可变520.检测大写字母125.验证回文串二、在Jav......
  • 代码随想录哈希表第二天:四数相加2、三数之和、四数之和、赎金信
    详细可移步个人代码随想录打卡四数相加使用2次,2层for循环。即可确定和值,然后使用一个map来记录第一个for循环的值,再第二次for循环中找,并记录次数即可。代码如下:importjava.util.HashMap;importjava.util.Map;classSolution{publicintfourSumCount(int[]n......
  • 简答理解【字符指针】,存放字符串首地址???
    2024-07-23笔记-5作者(Author):仟濹(网名)字符指针①定义指针的时候也赋值字符串为什么给一个指针赋值字符串的时候也可以打印出来整个字符串???//eg:char*p="abcdefg";printf("%s",p);//abcdefgputs(p);//同理printf("%s",p+1);//bcdefgputs(p+1);/......