2024华为od机试C卷【两个字符串间的最短路径问题】Java 实现

该博客介绍了如何用Java解决华为在线评估(OD)中的一道字符串处理问题。给定两个字符串A和B,计算从字符串A的起点到字符串B的终点的最短路径。路径由水平、垂直和斜边组成,当两个字符相同可走斜边。博主提供了问题的思路,将问题转化为BFS或DFS,并给出了具体的Java实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目

思路

Code


题目

给定两个字符串,分别为字符串A与字符串B。例如A字符串为ABCABBA,B字符串为CBABAC。可以得到m*n的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,
从原点(0,0)到(0,A)为水平边,距离为1,从(0,A)到(A,C)为垂直边,距离为1; 假设两个字符串同一位置的两个字符相同则可以作一个斜边、如(A.C)到.B)最短距离为斜边,距离同样为1。作出所有的斜边,则有(0.0)到(B.B)的距离为 1个水平边+1个垂直边+1个斜边 =3。
根据定义可知,原点到终点的最短距离路径如下图红线标记,最短距离为9;

路径为(0,0)->(A,0)->(A,C)->(B,B)->(C,B)->(A,A)->(B,B)->(B,B)->(A,A)->(A,C)


输入描述
空格分割的两个字符串A与字符串B,字符串不为”空串”。

字符格式满足正则规则:[A-Z] 字符串长度<= 10000
输出描述
原点到终点的最短距离

示例1:

<

题目要求编写一个函数,对于给定字符串s,将相邻重复的字符用它们的个数和字符本身表示。 例如,给定字符串s = "aaabbbccc",函数应该返回字符串"3a3b3c"。 要解决这个问题,我们可以使用两个指针来遍历字符串。一个指针指向当前字符,另一个指针用来记录重复字符的个数。当遇到不同的字符或遍历到字符串末尾时,将重复字符的个数和字符本身添加到结果字符串中。 具体步骤如下: 1. 初始化一个空字符串result,用来存放结果。 2. 设置两个指针,一个指向当前字符指针cur,一个用来记录重复字符的指针count,初始值为1。 3. 从第二个字符开始,遍历整个字符串。 4. 如果当前字符等于前一个字符,则将count加1。 5. 如果当前字符不等于前一个字符,则将重复字符的个数count和前一个字符添加到result中,并将count重置为1。 6. 遍历结束后,将最后一个字符和重复字符的个数count添加到result中。 7. 返回结果字符串result。 以下是具体的实现代码: ```python def enhance_string(s): result = "" cur = 0 count = 1 for i in range(1, len(s)): if s[i] == s[cur]: count += 1 else: result += str(count) + s[cur] cur = i count = 1 result += str(count) + s[cur] return result ``` 测样例: ```python s = "aaabbbccc" print(enhance_string(s)) # 输出"3a3b3c" ``` 通过以上步骤,我们可以成功地将字符串中的相邻重复字符替换为它们的个数和字符本身。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MISAYAONE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值