华为OD机试之求满足条件的最长子串的长度

这篇具有很好参考价值的文章主要介绍了华为OD机试之求满足条件的最长子串的长度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

求满足条件的最长子串的长度

题目描述

给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求:
1、 只包含1个字母(a-z, A-Z),其余必须是数字;
2、 字母可以在子串中的任意位置;
如果找不到满足要求的子串,如全是字母或全是数字,则返回-1。

输入描述

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

输出描述

子串的长度

输入 输出 说明
abC124ACb 4 满足条件的最长子串是C124或者124A,长度都是4
a5 2
aBB9 2 满足条件的为B9,长度为2
abcdef -1 没有满足条件的子串

源码和解析
解析:

将输入字符转换成单字符数组,遍历数组拿到满足条件的子串。将子串装入List,最后拿到最长子串的长度
子串开始字符是字母,下一个字母就是子串结束的标识,且不包含
子串开始字符是数字,字母出现就是子串结束的标识,要包含
所以一个子串结束时可以以字母来判断。若最后一位不是字符,是数字时不要遗漏。

示例代码:文章来源地址https://www.toymoban.com/news/detail-450722.html

import java.util.ArrayList;
import java.util.List;

public class T5 {
	public static void main(String[] args) {
		String input="abC124ACb";
		char singleCases[]=input.toCharArray();
		boolean isCaseStart=false;//是字符开头?
		StringBuilder strItem=new StringBuilder();//定义一个子串
		List<String> strList=new ArrayList<String>();//所有满足条件的子串都装进来
		for(int i=0;i<singleCases.length;i++){
			char sc=singleCases[i];
			//开始字符的处理
			if(strItem.length()==0&&isCase(sc)){
				//子串是空 且当前字符为字母
				isCaseStart=true;
				strItem.append(sc);
				continue;
			}else if(strItem.length()==0&&!isCase(sc)){
				//子串是空 但是当前不是字符
				isCaseStart=false;
				strItem.append(sc);
				continue;
			}
			//后续字符判断
			if(isCaseStart==true&&isCase(sc)){
				//字母开头, 且当前字符是字母 意味着一个子串结束
				if(strItem.length()>=2){
					//至少包含了一个数字
					strList.add(strItem.toString());
				}
				strItem.setLength(0);//清空
				strItem.append(sc);//追加新的字母 期待下一次连续
				continue;
			}
			if(isCaseStart==false &&isCase(sc)){
				//非字母开头,且当前字符是字母 意味着一个子串结束 当字符需要保留
				strItem.append(sc);
				if(strItem.length()>=2){
					strList.add(strItem.toString());
				}
				isCaseStart=true;//这回字符开头了
				strItem.setLength(0);//清空
				strItem.append(sc);//追加新的字母 期待下一次连续
				continue;
			}
			strItem.append(sc);
			//最后一位是数字时 必须首字符是字母
			if(i==singleCases.length-1&&isCaseStart){
				if(strItem.length()>=2){
					strList.add(strItem.toString());
				}
			}
		}
		int max=-1;
		for(String item:strList){
			if(item.length()>max){
				max=item.length();
			}
		}
		System.out.println("满足条件最大子串:"+max);
	}
	public static boolean isCase(char item){
		return (item<='z'&&item>='a') ||(item<='Z'&&item>='A');
	}
}

到了这里,关于华为OD机试之求满足条件的最长子串的长度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD机试 - 最长的指定瑕疵度的元音子串 - 正则表达式(Java 2023 B卷 200分)

    华为OD机试 2023B卷题库疯狂收录中,刷题 点这里 本专栏收录于

    2024年02月09日
    浏览(38)
  • 【新2023Q2模拟题JAVA】华为OD机试 - 符合条件的子串长度

    华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南 华为od机试,独家整理 已参加机试人员的实战技巧 给定字符串 A 、 B 和正整数 V , 字符串 A 和 B 的长度相

    2023年04月18日
    浏览(31)
  • 华为OD机试真题B卷 Java 实现【检查是否存在满足条件的数字组合】,附详细解题思路

    给定一个正整数数组,检查数组中是否存在满足规则的数字组合 规则:A = B + 2C 第一行输出数组的元素个数。 接下来一行输出所有数组元素,用空格隔开。 如果存在满足要求的数,在同一行里依次输出规则里A/B/C的取值,用空格隔开。 如果不存在,输出0。 读取输入的数组元

    2024年02月07日
    浏览(35)
  • 【华为OD机考 统一考试机试C卷】 最长的指定瑕疵度的元音子串(C++ Java JavaScript Python)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月04日
    浏览(27)
  • 【华为OD机考 统一考试机试C卷】 环中最长子串/字符成环找偶数O(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年01月25日
    浏览(35)
  • 华为OD机试之最长连续子序列(Java源码)

    题目描述 有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度, 如果没有满足要求的序列,返回-1。 输入描述 第一行输入是:N个正整数组成的一个序列 第二行输入是:给定整数sum 输出描述 最长的连续子序列的长

    2024年02月09日
    浏览(32)
  • 华为OD机试 - 最长公共后缀(Java & JS & Python)

    题目描述 编写一个函数来查找字符串数组中的最长公共后缀; 如果不存在公共后缀,返回固定字符串: @Zero。 补充说明: 字符串长度范围:[2, 1000] 字符串中字符取值范围为[1, 126] 输入描述 无 输出描述 无 用例 输入 [\\\"abc\\\",\\\"bbc\\\",\\\"c\\\"] 输出 \\\"c\\\" 说明 返回公共后缀: c 输入 [\\\"aa\\\",\\\"b

    2024年02月13日
    浏览(45)
  • 华为OD机试真题 Java 实现【最多提取子串数目】【2023Q1 100分】

    给定由[a-z] 26 个英文小写字母组成的字符串 A和 B,其中A中可能存在重复字母,B 中不会存在重复字母,现从字符串 A 中按规则挑选一些字母,可以组成字符串 B。 挑选规则如下: 同一个位置的字母只能被挑选一次; 被挑选字母的相对先后顺序不能改变; 求最多可以同时从

    2024年02月06日
    浏览(27)
  • 华为OD机试 - 最长合法表达式(Java & JS & Python & C)

    题目描述 提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回 0 。 简单数学表达式只能包含以下内容: 0-9数字,符号+-* 说明: 所有数字,计算结果都不超过long 如果有多个长度一样的,请返回第一个表达式的结果 数学表达

    2024年02月04日
    浏览(30)
  • 华为OD机试 - 最长子字符串的长度(一)(Java & JS & Python & C)

    题目描述 给你一个字符串 s,首尾相连成一个环形,请你在环中找出 \\\'o\\\' 字符出现了偶数次最长子字符串的长度。 输入描述 输入是一个小写字母组成的字符串 输出描述 输出是一个整数 备注 1 ≤ s.length ≤ 500000 s 只包含小写英文字母 用例 输入 alolobo 输出 6 说明 最长子字符串

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包