华为OD机试真题 - 字符串比较 (D卷,200分)
题目描述
给定字符串A、B和正整数V,A的长度与B的长度相等, 请计算A中满足如下条件的最大连续子串的长度:
- 该连续子串在A和B中的位置和长度均相同。
- 该连续子串|A[i] – B[i]|之和小于等于V。其中|A[i] – B[i]|表示两个字母ASCII码之差的绝对值。
目录
题目描述
输入描述
输出描述
用例
题目解析
Java算法源码
JS算法源码
Python算法源码
C算法源码
华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟,机试是在牛客考试,练习的时候也可以在牛客网练习,提前熟悉操作
https://ac.nowcoder.com/acm/contest/5652/K
点击上方链接进入牛客练习界面,可以自定义题目,自定义输入、输出等等,华为OD真实机试环境,非其他第三方平台模拟。
输入描述
输入为三行:
- 第一行为字符串A,仅包含小写字符,1 <= A.length <=1000。
- 第二行为字符串B,仅包含小写字符,1 <= B.length <=1000。
- 第三行为正整数V,0<= V <= 10000。
输出描述
字符串最大连续子串的长度,要求该子串|A[i] – B[i]|之和小于等于V。
用例
题目解析
- 首先,我们需要遍历字符串A和B,计算每个位置上字符的ASCII码之差的绝对值。
- 然后,我们需要找到满足条件的连续子串,即该子串的|A[i] - B[i]|之和小于等于V。
- 最后,我们需要找到满足条件的最大连续子串的长度。
Java算法源码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine(); String b = sc.nextLine(); int v = Integer.parseInt(sc.nextLine()); System.out.println(getResult(a, b, v)); } public static int getResult(String a, String b, int v) { int n = a.length(); int[] preSum = new int[n + 1]; for (int i = 1; i <= n; i++) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试题库D卷 文章被收录于专栏
2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。