华为OD机试题库《C++》限时优惠 9.9
华为OD机试题库《Python》限时优惠 9.9
华为OD机试题库《JavaScript》限时优惠 9.9
针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。
看不懂有疑问需要答疑辅导欢迎私VX: code5bug
题目描述
某公司为了更高效的编写代码,邀请你开发一款代码编辑器程序。
程序的输入为 已有的代码文本和指令序列,程序需输出编辑后的最终文本。指针初始位置位于文本的开头。 支持的指令(X为大于等于0的整数, word 为无空格的字符串):
- FORWARD X 指针向前(右)移动X,如果指针移动位置超过了文本末尾,则将指针移动到文本末尾
- BACKWARD X 指针向后(左)移动X,如果指针移动位置超过了文本开头,则将指针移动到文本开头
- SEARCH-FORWARD word 从指针当前位置向前查找 word 并将指针移动到word的起始位置,如果未找到则保持不变
- SEARCH-BACKWARD word 在文本中向后查找 word 并将指针移动到word的起始位置,如果未找到则保持不变
- INSERT word 在指针当前位置前插入word,并将指针移动到word的结尾
- REPLACE word 在指针当前位置替换并插入字符(删除原有字符,并增加新的字符)
- DELETE X 在指针位置删除X个字符
备注: 文本最长长度不超过 256K
输入描述
输入的第一行为命令列表的长度K
输入的第二行为文件中的原始文本
接下来的K行,每行为一个指令
输出描述
编辑后的最终结果
示例1
输入:
2
hllo
FORWARD 1
INSERT e
输出:
hello
说明:
在文本的第一个位置插入
示例2
输入:
1
ello
INSERT h
输出:
hello
说明:
在文本开头插入
示例3
输入:
2
hell
FORWARD 1000
INSERT o
输出:
hello
说明:
在文本的结尾插入
示例4
输入:
1
hello
REPLACE HELLO
输出:
HELLO
题解
这道题目属于模拟题,主要考察对字符串操作的模拟能力。需要根据不同的指令对文本进行编辑,并维护指针的位置。
解题思路
- 初始化:读取初始文本和指令序列,初始化指针位置为0(文本开头)。
- 处理指令:
- FORWARD X:指针向右移动X,不超过文本末尾。
- BACKWARD X:指针向左移动X,不超过文本开头。
- SEARCH-FORWARD word:从指针当前位置向前查找word,并将指针移动到word的起始位置。
- SEARCH-BACKWARD word:从指针当前位置向后查找word,并将指针移动到word的起始位置。
- INSERT word:在指针当前位置前插入word,并将指针移动到word的结尾。
- REPLACE word:替换指针当前位置的字符为word。
- DELETE X:删除指针当前位置的X个字符。
- 输出结果:处理完所有指令后,输出最终的文本。
Python
"""
@author: code5bug
"""
k = int(input())
data = input()
pos = 0
for _ in range(k):
cmd, x = input().split()
if cmd == "FORWARD": # 指针向前移动
pos = min(len(data), pos + int(x))
elif cmd == "BACKWARD": # 指针向后移动
pos = max(0, pos - int(x))
elif cmd == "SEARCH-FORWARD": # 向前搜索
idx = data.rfind(x, pos)
if idx != -1:
pos = idx
elif cmd == "SEARCH-BACKWARD": # 向后搜索
sz = len(x)
for s in range(pos - sz, -1, -1):
t = data[s:s+sz]
if t == x:
pos = s
break
elif cmd == "INSERT": # 插入
data = data[:pos] + x + data[pos:]
pos += len(x)
elif cmd == "REPLACE": # 替换字符
data = data[:pos] + x
elif cmd == "DELETE": # 删除字符
sz = min(len(data) - pos, int(x))
data = data[:pos] + data[pos + sz:]
print(data)
希望这个专栏能让您熟练掌握算法, 🎁🎁🎁。
整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏