目录

蓝桥杯备赛-基础训练四-字符串-day18

蓝桥杯备赛-基础训练(四)-字符串 day18

https://i-blog.csdnimg.cn/direct/979d7bf27ba54659aaf178b43585c1cd.png 今天咱们继续字符串

1、替换数字

题目:

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。

例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。

对于输入字符串 “a5b”,函数应该将其转换为 “anumberb”

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

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

样例输入:a1b2c3

样例输出:anumberbnumbercnumber

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

思路:

学习了代码随想录卡哥的思路,我们主要是用双指针的方法:

https://i-blog.csdnimg.cn/direct/8ee2f2d02dba4d49afdfe875a66cf429.png

具体思路大家可以看我下列的代码,注释比较多大家应该能看得懂,并且附上我自己的思考思路图:

https://i-blog.csdnimg.cn/direct/04acda0cfff047ee990765177f98ec94.jpeg

代码:
# 替换数字
# 给定一个字符串 s,它包含小写字母和数字字符,
# 请编写一个函数,将字符串中的字母字符保持不变,
# 而将每个数字字符替换为number。

from typing import List
def charu_zimu(s:List[str],i,l):
    add_s = ['r','e','b','m','u','n']
    k = l+4
    u = l-1
    j=0
    s.extend([''] * 5)  # 在列表末尾添加6个空的字符串
    # 这里可能代码撰写的思路大家需要知道一下,
    # 因为如果取k=i,相当于是大家在k=i的时候还要执行这个代码
    # 而我的代码思路并不想在k=i的时候执行
    while u>i:
        #主要是要向后移动,先扩展这个list的大小
        s[k]=s[u]
        u-=1
        k-=1
    while k>=i:
        s[k]=add_s[j]
        k-=1
        j+=1


s = list(str(input("请输入一串混合了数字和英文小写字母的字符串:")))
l = len(s)
i = 0
while i<l:
    if s[i] and 48<=ord(s[i])<=57:
        charu_zimu(s,i,l)
        l = len(s)
        i+=5
    i+=1
print(s)

2、翻转字符串里的单词

题目:

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

示例 1:

输入: “the sky is blue”

输出: “blue is sky the”

示例 2:

输入: "  hello world!  "

输出: “world! hello”

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

示例 3:

输入: “a good   example”

输出: “example good a”

解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个

思路:

在没有看卡哥的思想之前,我根据我自己的思路给大家讲讲:

首先,输入的这个语句里面各个单词之间是有空格的

我想到的是使用split来分开各个单词

然后将顺序翻转过来,最后我们再用joint进行拼接,事实证明这个思路是可行的

代码:
judge = 1
while judge:
    a = int(input("如果你想继续程序请输入1,若不想则输入任意值:"))
    if a == 1:
        s = input("请输入一句话(英文),并且每一个单词之间需要输入一个空格:")
        words = s.split()
        print(words)
        x = words[::-1]  # 使用切片的方法
        # 切片的方法不仅仅适用于列表,同样可以适用于字符串 元组 数组Numpy数组
        print(x)
        # 然后我们可以适用join的方法将单词重新组合成字符串,单词之间用一个空格来分割
        output_str = " ".join(x)
        print(output_str)
    else:
        judge = 0

3、右旋字符串

题目:

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 “abcdefg” 和整数 2,函数应该将其转换为 “fgabcde”。

输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出:输出共一行,为进行了右旋转操作后的字符串。

思路:

字符串的题希望大家都能自己画画图

为了让本题更有意义,提升一下本题难度: 不能申请额外空间,只能在本串上操作

我觉得卡哥的思路非常清晰,这里就使用他的思路和绘图,大家应该很好理解:

https://i-blog.csdnimg.cn/direct/fdbe81468db842c2a28512616c2fbb12.png

https://i-blog.csdnimg.cn/direct/80c9a0cca1c04eaf8a3b48d258bae96f.png

https://i-blog.csdnimg.cn/direct/75b7a7a5f2f349a880caad33552d2831.png

https://i-blog.csdnimg.cn/direct/da11ebeafa1e447b9c265f7c6f19d524.png

代码:

代码咱就先不看卡哥的,自己写一下(先是把整个代码倒序过来,然后再进行后续的处理)

k = int(input("请输入翻转的个数:"))
s = list(str(input("请输入你要进行右翻转的字符串:")))
s_1 = s[::-1]#还是使用切片
i = 0
j = k-1
while i<=j:
    s_1[i],s_1[j] = s_1[j],s_1[i]#直接交换位置
    i+=1
    j-=1

l = len(s)
i = k
j = l-1
while i<=j:
    s_1[i],s_1[j] = s_1[j],s_1[i]
    i+=1
    j-=1
print(s_1)

上半部分就到这里为止,大家一起加油