网站首页 > 文章精选 正文
def min_distance():
# 读取输入
s = input().strip()
required = input().strip()
# 创建一个字典来存储每个字符的所有出现位置
from collections import defaultdict
char_positions = defaultdict(list)
for idx, char in enumerate(s):
char_positions[char].append(idx)
# 检查所有必过字符是否都存在
for char in required:
if char not in char_positions:
print(-1)
return
# 动态规划表,dp[i][j]表示处理到required的第i个字符时,位于s的第j个位置的最小总距离
# 初始化处理第一个字符的所有可能位置
dp = []
first_char = required[0]
for pos in char_positions[first_char]:
dp.append((pos, 0)) # (current position, total distance)
for i in range(1, len(required)):
current_char = required[i]
next_dp = []
for pos in char_positions[current_char]:
min_dist = float('inf')
for prev_pos, prev_dist in dp:
# 计算从prev_pos到pos的距离
dist = abs(pos - prev_pos)
if prev_dist + dist < min_dist:
min_dist = prev_dist + dist
next_dp.append((pos, min_dist))
dp = next_dp
# 找出所有可能位置中的最小总距离
if not dp:
print(-1)
else:
min_total = min(dist for pos, dist in dp)
print(min_total)
min_distance()
关键步骤:
- 字母位置记录:首先记录每个字母在字符串中的位置(索引),因为同一个字母可能出现多次。
- 必过点处理:处理必过的点,确定每个必过点的字母在字符串中的位置。
- 动态规划计算最小距离:使用动态规划来计算从一个必过点到下一个必过点的最小距离。动态规划的状态可以表示为当前所在的字母位置,以及已经经过的必过点数量。
- 上一篇: Python合集之Python字符串常用操作(一)
- 下一篇: CHAR与VARCHAR详解
猜你喜欢
- 2025-04-26 Java笔试题目-获取最长不含重复子串的长度
- 2025-04-26 八卦的符号及其涵义:
- 2025-04-26 西门子PLC之间S7通讯的技巧和经验
- 2025-04-26 聊聊字符集编码与数据压缩
- 2025-04-26 MYSQL有哪些数据类型
- 2025-04-26 散列算法比较:MD5、SHA1、SHA256有哪些区别
- 2025-04-26 慢 SQL 分析与优化
- 2025-04-26 分列出长度各异的一列字符串的最后一位,Excel 补上了这个功能
- 2025-04-26 CHAR与VARCHAR详解
- 2025-04-26 Python合集之Python字符串常用操作(一)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)