当前位置:   article > 正文

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

最长子字符串的长度 od

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

题目描述

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

输入描述

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

输出描述

子串的长度

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

源码和解析
解析:

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

示例代码:

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');
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/466126
推荐阅读
相关标签
  

闽ICP备14008679号