求满足条件的最长子串的长度 - 华为OD统一考试(D卷)

OD统一考试(D卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子的长度,字符串本身是其最长的子串,子串要求:

  1. 只包含1个字母(az,AZ),其余必须是数字;
  2. 字母可以在子串中的任意位置;

如果找不到满足要求的子串,如全是字母或全是数字,则返回-1。

输入描述

字符串(只包含字母和数字)

输出描述

子串的长度

示例1

输入:
abC124ACb

输出:
4

说明:
满足条件的最长子串是C124或者124A,长度都是4

示例2

输入:
a5

输出:
2

说明:
字符串目身就是满足条件的子串,长度为2

示例3

输入:
aBB9

输出:
2

说明:
满足条件的子串为B9,长度为2

示例4

输入:
abcdef

输出:
-1

说明:
没有满足要求的子串,返回-1

题解

题目类型: 这道题属于字符串处理的问题,需要通过正则表达式或其他方法找到符合要求的子串。

解题思路

  1. 定义一个正则表达式模式,用于匹配包含至少一个字母且之间可能包含数字的字符串。
  2. 使用该正则表达式模式在输入的字符串中查找所有匹配项。
  3. 对每个匹配项计算其长度,并找到最大的长度。

代码描述

  1. Java代码使用了Scanner来读取用户输入的字符串,然后使用正则表达式在字符串中查找符合要求的子串,最后输出最大子串的长度。
  2. Python代码直接使用re模块来处理正则表达式匹配,逻辑与Java代码类似,最后输出最大子串的长度。
  3. C++代码也是通过正则表达式来进行匹配,但使用了regex库,然后在找到所有匹配项中找到最大长度的子串,并输出其长度。

Java

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象以读取输入
        Scanner scanner = new Scanner(System.in);

        // 从标准输入流中读取一行文本并存储到字符串变量text中,即用户输入的文本
        String text = scanner.nextLine();

        // 定义正则表达式模式,用于匹配包含至少一个字母且之间可能包含数字的字符串
        Pattern pattern = Pattern.compile("\\d*[a-zA-Z]\\d*");
        // 创建Matcher对象用于匹配文本
        Matcher matcher = pattern.matcher(text);

        // 初始化最大长度为-1,若未找到匹配项,则默认有效长度为-1
 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。

全部评论

相关推荐

君子以行言:这种说实话没有确切的答案,不同部门不同组差别都很大,每个人能力差别也很大。但是总体来看,普通人可能就是35岁差不多了,不可能40或者45的
投递华为等公司10个岗位 牛客帮帮团来啦!有问必答
点赞 评论 收藏
转发
4 2 评论
分享
牛客网
牛客企业服务