试题 算法提高 字符串的操作(pyhton详细版)

2020年12月电子学会Python等级考试试卷(三级)考题解析 青少年软件编程(Python)等级考试试卷(三级) 分数:100.00 题数:38 一、单选题(共25题,每题2分,共50分) 要对二维列表所有的数据进行格式化输出,打印成表格形状,程序段如下:  ls = [[‘金京’,89],[ ‘吴树海’,80],[ ‘王津津’,90]] for row in range(len(ls)):     for column in range(len(ls[row])):       & 阅读详情

先放上题目要求,通过一个个程序讲解,让你彻底了解我的思路,希望对你有帮助。


author:xiao黄
缓慢而坚定的生长


资源限制
时间限制:1.0s   内存限制:256.0MB
问题描述
  给出一个字符串S,然后给出q条指令,分别有4种:

  1. Append str
  表示在S的最后追加一个字符串str。
  例:
  原字符串:ABCDE
  执行 Append FGHIJ 后
  字符串变为:ABCDEFGHIJ

  2. Insert x str
  表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)
  例:
  原字符串:ABCGHIJ
  执行 Insert 4 DEF 后
  字符串变为:ABCDEFGHIJ

  3. Swap a b c d
  表示交换从第a位到第b位的字符串与从第c位到第d位的字符串。(输入保证0<a<b<c<d<=当前字符串长度)
  例:
  原字符串:ABGHIFCDEJ
  执行 Swap 3 5 7 9后
  字符串变为:ABCDEFGHIJ

  4. Reverse a b
  表示将从第a位到第b位的字符串反转。(输入保证0<a<b<=当前字符串长度)
  例:
  原字符串:ABGFEDCHIJ
  执行 Reverse 3 7 后
  字符串变为:ABCDEFGHIJ

  最后输出按顺序执行完指令后的字符串。
输入格式
  输入第一行包含字符串S,第二行包含一个整数q,接下来q行分别为q个指令。
输出格式
  输出为1行,为按顺序执行完输入指令后的字符串。
样例输入
My
5
Append Hello
Insert 3 dlroW
Reverse 3 7
Swap 3 7 8 12
Swap 1 2 3 7
样例输出
HelloMyWorld
样例说明
  原字符串:My
  执行 Append Hello 后:MyHello
  执行 Insert 3 dlroW 后:MydlroWHello
  执行 Reverse 3 7 后:MyWorldHello
  执行 Swap 3 7 8 12 后:MyHelloWorld
  执行 Swap 1 2 3 7 后:HelloMyWorld
数据规模和约定
  对于30%的数据,q=1;

  对于70%的数据,如有Swap指令,Swap指令中b-a=d-c;

  对于100%的数据,最终字符串长度不大于40000,1<=q<=150

主函数:
S是输入的字符串,我在此转成了列表,是因为在Append()函数和Insert()函数中用到列表的自带函数。当然也可以不转成列表,只需要把相应的操作修改即可。
‘’.jion(S)的含义是将列表无缝衔接转成字符串。
例:’’.jion([‘1’,‘2’,‘3’,‘4’,‘5’,‘6’]) 会变成123456
n是题意中的q

if __name__ == "__main__":
        S = list(input())
        n = int(input())
        if 1<=n<=150:
                while n > 0:
                        nums = input()
                        S = fun(S,nums)
                        n -= 1
        print(''.join(S))

关于Append函数:
在原有的S后面添加s,此处是利用列表的append()函数,在S的后面一个个添加s中的元素,其中append()的时间复杂度为O(1)。

def Append(S,s):
        for i in s:
                S.append(i)

关于Insert()函数:
在原字符串S的x位置插入s,利用列表的insert()函数插入即可。

def Insert(S,x,s):
        for i in range(len(s)):
                S.insert(x-1+i,s[i])

关于Swap()函数:
此处考虑到d的位置不同会对列表的切片操作有不同的影响,所以分为d=n和d<n两种情况。

def Swap(S,a,b,c,d):
        n = len(S)
        if n > d:
                n1 = S[0:a-1]
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:d]
                n5 = S[d:]
                S = n1+n4+n3+n2+n5
        elif n == d:
                n1 = S[0:a-1] 
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:]
                S =  n1+n4+n3+n2
        return S

关于Reverse()函数:
在这里就要考虑a和b两个值的大小,分别讨论在a=1和a≠1的情况下b的取值对这个函数的影响。比如当a=1,b=n,那么直接将这个函数翻转即可。

def Reverse(S,a,b):
        n = len(S)
        if a > 1:
                if b < n:
                        n1 = S[:a-1]
                        n2 = S[a-1:b]
                        n3 = S[b:]
                        S = n1 + n2[::-1] +n3
                elif b == n:
                        n1 = S[:a-1]
                        n2 = S[a-1:]
                        S = n1 + n2[::-1]
        else:
                if b < n:
                        n1 = S[:b]
                        n2 = S[b:]
                        s = n1[::-1] + n2
                else:
                        S = S[::-1]
        return S

关于fun()函数:
在这个函数中,分别对每次输入的值进行判断,并执行相应的操作。

def fun(S,nums):
        a = nums.split()
        if a[0] == 'Append':
                Append(S,a[1])
        elif a[0] == 'Insert':
                Insert(S,int(a[1]),a[2])
        elif a[0] == "Swap":
                S = Swap(S,int(a[1]),int(a[2]),int(a[3]),int(a[4]))
        elif a[0] == "Reverse":
                S = Reverse(S,int(a[1]),int(a[2]))
        return S

最后附上详细代码:

def Append(S,s):
        for i in s:
                S.append(i)

def Insert(S,x,s):
        for i in range(len(s)):
                S.insert(x-1+i,s[i])

def Swap(S,a,b,c,d):
        n = len(S)
        if n > d:
                n1 = S[0:a-1]
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:d]
                n5 = S[d:]
                S = n1+n4+n3+n2+n5
        elif n == d:
                n1 = S[0:a-1] 
                n2 = S[a-1:b]
                n3 = S[b:c-1]
                n4 = S[c-1:]
                S =  n1+n4+n3+n2
        return S

def Reverse(S,a,b):
        n = len(S)
        if a > 1:
                if b < n:
                        n1 = S[:a-1]
                        n2 = S[a-1:b]
                        n3 = S[b:]
                        S = n1 + n2[::-1] +n3
                elif b == n:
                        n1 = S[:a-1]
                        n2 = S[a-1:]
                        S = n1 + n2[::-1]
        else:
                if b < n:
                        n1 = S[:b]
                        n2 = S[b:]
                        s = n1[::-1] + n2
                else:
                        S = S[::-1]
        return S

def fun(S,nums):
        a = nums.split()
        if a[0] == 'Append':
                Append(S,a[1])
        elif a[0] == 'Insert':
                Insert(S,int(a[1]),a[2])
        elif a[0] == "Swap":
                S = Swap(S,int(a[1]),int(a[2]),int(a[3]),int(a[4]))
        elif a[0] == "Reverse":
                S = Reverse(S,int(a[1]),int(a[2]))
        return S

if __name__ == "__main__":
        S = list(input())
        n = int(input())
        if 1<=n<=150:
                while n > 0:
                        nums = input()
                        S = fun(S,nums)
                        n -= 1
        print(''.join(S))
【NLP】第十章:位置编码Positional Encoding 前面讲RNN时一般都会有一个ht的输出,这个输出就是样本与样本之间的信息,而且RNN是时序循环的,所以RNN本身的结构,在物理上,就自带词的前后顺序信息的。比如词never,不管never本身的词向量是什么,只要你在序列中排第一个位置,你的位置向量就是[0,1,01],你排第三个位置,你的位置向量就是[0.9,-0,4,0.2,1.0]。也所以,你可以理解为:embedding后的词嵌入,PE按照每个样本在sequence中的位置,把embedding后的词嵌入给扭转后,才送入attention的。 阅读详情

相关推荐

CSS字体样式全攻略

🧱 让文字有空间感,适合标题或LOGO。🖋️适合插画、创意工作者的个人页面。🔥 适合标题、品牌名,视觉冲击力强。🧘‍♀️适合极简设计、文化类网站。✨适合科技类网站、博客、作品集。🚀适合游戏、AI、科技类项目。🐰 适合儿童类网站或节日氛围。📖适合时尚、生活方式类内容。🌫️ 适合神秘、梦幻主题。🌃 夜店风、科技感十足。具体效果是文字会上下跳动。

dreams_dream的博客 1806

JAVA-蓝桥杯-算法提高 字符串的操作

问题描述   给出一个字符串S,然后给出q条指令,分别有4种:   1. Append str   表示在S的最后追加一个字符串str。   例:   原字符串:ABCDE   执行 Append FGHIJ 后   字符串变为:ABCDEFGHIJ   2. Insert x str   表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)   例:   原字...

YCCX_LHH21的博客 528

瑞芯微RK3576开发实战:固件烧录与内核启动的典型问题解析

本文详细解析了瑞芯微RK3576开发板在固件烧录与内核启动过程中遇到的典型问题及解决方案。从开发工具版本检查、DDR配置调整到内核启动异常的设备树适配和电源管理问题,提供了系统性的调试方法和实用技巧,帮助开发者高效解决RK3576开发中的常见挑战。

weixin_33700350的博客 455

C语言字符串操作大全

附:转载他人,自己加工。   1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncm

良师,益友 1万+

SAP PP模块 MRP配置实战:5步完成工厂级物料需求计划激活

本文详细介绍了SAP PP模块中物料需求计划(MRP)的工厂级配置实战,通过5个关键步骤从基础环境准备到最终激活。内容涵盖SPRO后台配置、MRP控制者定义、主数据设置及核心参数调整,帮助顾问快速掌握MRP配置清单的完整流程,确保物料需求计划的高效运行。

weixin_30431445的博客 342

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4707

蓝桥杯试题 算法提高 字符串的操作

给出一个字符串S,然后给出q条指令,分别有4种: 1. Append str   表示在S的最后追加一个字符串str。   例:   原字符串:ABCDE   执行 Append FGHIJ 后   字符串变为:ABCDEFGHIJ 2. Insert x str   表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)   例:   原字符串:ABCGHIJ   ...

pengmingjv的博客 1502

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2699

蓝桥杯训练——字符串的操作

试题 算法提高 字符串的操作 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   给出一个字符串S,然后给出q条指令,分别有4种: 1. Append str   表示在S的最后追加一个字符串str。   例:   原字符串:ABCDE   执行 Append FGHIJ 后   字符串变为:ABCDEFGHIJ 2. Insert x str   表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)   例:   原字符串:ABCGHIJ   执行 I

修心 980

华为OD机试双机位C卷-部门人力分配 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【部门人力分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 部门人力分配。

qq_45776114的博客 1874

深度学习在移动开发中的应用:实时姿态估计实战

我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。

Programming Talk 325

字符串的操作 356 java 题解

问题描述   给出一个字符串S,然后给出q条指令,分别有4种:   1. Append str   表示在S的最后追加一个字符串str。   例:   原字符串:ABCDE   执行 Append FGHIJ 后   字符串变为:ABCDEFGHIJ   2. Insert x str   表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)   例:   原字符串:ABCGHIJ   执行 Insert 4 DEF 后   字符串变为:ABCDEFGHIJ   3. Sw

深街酒徒的博客 380

华为OD机试真题 新系统 2026-08-16 Python&JS【智能家居模式调度优化】

智能家居系统中有多个自动化联动模式,每个模式 modes[i]=[start_time,end_time,power],表示它在左闭右开区间 [start_time,end_time) 内持续消耗固定功率 power。

MISAYAONE的博客 85

关于Pyhton这第五件事

(1)解释 Linux 中的符号链接和硬链接在 Linux 里,符号链接与硬链接是两种不同的文件链接机制。硬链接通过索引节点(Inode)关联文件,和源文件共享 Inode 及属性,删除源文件不影响硬链接,只要有一个链接指向该 Inode 数据就不会消失,不过它无法跨文件系统、不能指向目录;符号链接是特殊文件,有独立 Inode ,内容为指向其他文件或目录的路径,类似快捷方式,依赖源文件存在,源文件删除则软链接失效,但它跨文件系统、指向目录更灵活,还可指向不存在的路径。

2301_81271094的博客 869

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

分享一套 python 试题

分享一套 python 试题

qq_44925249的博客 304

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python3实现在一个字符串中找到第一个只出现一次的字符

这道题是剑指offer中的35题,也是一道经典的面试题。 str = "ssssaaaccddsadasf" 使用两层for循环遍历,直到遇到只出现一次的字符返回该字符 def methond1(str): len_str = len(str) for i in range(len_str): count = 0 for j in range...

qianmo0417的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python常见笔试题整理

1、统计在一个队列中的数字,有多少个正数,多少个负数 a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8] \# 用列表生成式,生新的列表 b = [i for i in a if i > 0] print("大于0的个数:%s" % len(b)) c = [i for i in a if i < 0] print("小于0的个数:%s" % len(c)) 2、字符串切片 字符串 "axbyczdj",如果得到结果“abcd” \# 字符串切片 a = "axby

weixin_44599086的博客 1991

爱奇艺2019秋招算法笔试题A卷考点解析与备考策略

在算法岗求职竞争中,扎实的数据结构与算法基础是笔试环节的核心筛选标准。无论是排序、二分查找还是KMP字符串匹配,这些经典考点都要求求职者不仅理解原理,更能在有限时间内完成准确编码。机器学习基础同样重要,KNN、K-Means、深度学习中的损失函数与优化器选择,直接反映候选人对模型本质的理解深度。这些技术能力在视频平台的海量数据处理、推荐系统构建和内容理解场景中具有关键工程价值。针对爱奇艺2019秋招算法方向笔试题(A)的系统拆解,可以帮助应试者快速定位高频考点,掌握从客观题到编程题的答题节奏,从而在秋招中更

weixin_34033624的博客 391

python面试题大全(四)

MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,用于产生一个固定大小(128 位或 32 个十六进制字符)的散列值,通常用于对任意数据生成唯一的标识。MD5 加密算法是由 Ronald Rivest 在 1991 年设计的。MD5 生成的散列值是固定长度的,无论输入的数据有多长,都会产生一个 128 位的散列值。MD5 是单向散列函数,即从散列值不能反向推导出原始输入。因此,无法通过 MD5 散列值还原出原始数据。

海哥python的博客 1195

python软件开发工程师试题及答案_珍藏版 Python 开发工程师面试试题

珍藏版 Python 开发工程师面试试题说明:不拿到几家公司的offer,那就是卑鄙的浪费一.Python_基础语法1.可变与不可变类型;2.浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现;3.__new__() 与 __init__()的区别;4.你知道几种设计模式;5.编码和解码你了解过么;6.列表推导list comprehension和生成器的优劣;7.什么是装饰器...

weixin_39976081的博客 669

leetcode—python 50天刷题 第50题 反转字符串中的单词 lll

题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: “Let’s take LeetCode contest” 输出: “s’teL ekat edoCteeL tsetnoc” 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 来源:力扣(LeetCode) 链接:https://leetcode-cn...

weixin_45556991的博客 297

python笔试输入输出格式_算法笔试过程中的几个输入输出python语句

算法数据结构算法笔试过程中的几个输入输出python语句 title: python在线笔试学习笔记localimage: image1urlname: writenexamcategories:summarytags: [writen, exam]date: 2019-9-17 10:00:00---摘要本文主要介绍一些算法笔试过程中的几个输入输出python语句的代码格式...

weixin_39984952的博客 211

python 小数相乘_110 道 Python 面试笔试题超强汇总!

编译:嘉美伯爵友情提示:文章知识点较多,建议收藏慢慢看这几天好多同学留言问有没有 Python 面试题,今天统一给大家分享一遍,希望能帮助此时仍在找工作的同学,尽快找到工作,希望对基本知识不熟悉的同学,能认真做一遍,肯定会有不少收获。1、一行代码实现 1--100 之和?利用 sum() 函数求和2、如何在一个函数内部修改全局变量?利用 global 修改全局变量3、列出 5 个 Pyt...

weixin_42631411的博客 303

Python内存池管理与缓冲池设计

Python是一门开发效率很高的语言,而且其既下里巴人,又阳春白雪。也就是说这门语言只要稍加学习就可以上手开发,而深入探究也会发现Python有很多高深的东西。最近读了《Python源码剖析》,收获良多,今天就把Python的内存管理整理一番。 本文的组织如下: 第一部分:整理Python的内存管理机制,主要包括内存池以及对象缓存池 第二部分:从百度的笔试题来探讨如何实现一个缓存池。 第一部...

mystonelxj的博客 957

python二级要学多久,python二级简单吗

序列都可以进行的操作包括索引,切片,加,乘,检查成员,此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法,序列是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现,下面是一些需要掌握的对列表的一些操作。考查seed()、random()、randint()、getrandbits()、randrange()、uniform()、choice()、shuffle()、sample()(1)程序的格式框架、缩进、注释、变量、命名、保留字、数据类型、赋值语句、引用。

Night368的博客 1028

python 刷leetcode 题目(8)

28. 实现strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。示例 1:输入: haystack = "hello", needle = "ll" 输出: 2 示例 2:输入: haystack = "aaaaa", nee...

凌墨的博客 731
上一篇: 试题 算法提高 质数2
下一篇: 复杂网络的可视化分析基础教程详细版(一)
xiao黄
xiao黄 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄8年 1万+粉丝 250原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值