【华为OD】C卷真题 200分 100%通过:求满足条件的最长子串的长度 C语言代码实现【思路+代码】

 题目描述:

 

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

1、 只包含1个字母(a~z, A~Z),其余必须是数字;

2、 字母可以在子串中的任意位置;

 

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

 

 

输入描述:

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

输出描述:

子串的长度

示例1输入输出示例仅供调试,后台判题数据一般不包含示例

输入

abC124ACb

输出

4

说明

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

示例2输入输出示例仅供调试,后台判题数据一般不包含示例

输入

a5

输出

2

说明

字符串自身就是满足条件的子串,长度为2

示例3输入输出示例仅供调试,后台判题数据一般不包含示例

输入

aBB9

输出

2

说明

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

示例4输入输出示例仅供调试,后台判题数据一般不包含示例

输入

abcdef

输出

-1

说明

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

     668                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   |  +   |        +
  |      +    | +      |   +   +----+        |   |          +   |  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   |  +   |        +
  |      +    | +      |   +   +    +        |   |          +   |  +   |        +
  |      +---+ |     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     |     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     |     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     |     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     |     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         |         |   |    |         ++              |   |  |+   |        +
  |0 |         |         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         |         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

 

题目解析:

        按题目逻辑去实现即可,判断好数字、字母就行

代码实现:

#include 
#include 
#include 

int check(char * string){
	int cnt = 0;
    int i = 0;
	for(i = 0; string[i] != '\0'; ++i){
		if(isdigit(string[i])){
			cnt++;
		}
	}
	return cnt == strlen(string) || cnt == 0;
}

int getMaxWindow(char * string){
	int left = 0;
	int right = 0;
	int alpha = 0;
	int max = 0;
	while(string[right] != '\0'){
		if(isalpha(string[right])){
			++alpha;
		}
		if(alpha == 2){
			while(isdigit(string[left])){
				++left;
			}
			++left, --alpha;
		}
		max = max < right - left && alpha == 1 ? right - left : max;
		++right;
	}
	return max + 1;
}

int main(){
	char string[10000] = {0};
	scanf("%s", string);
	if(check(string)){
		puts("-1");
		return 0;
	}
	printf("%d", getMaxWindow(string));
	return 0;
}

【华为OD】C卷真题 200分 100%通过:求满足条件的最长子串的长度 C语言代码实现【思路+代码】_第1张图片

 

你可能感兴趣的:(杂谈,算法,c++,动态规划,华为od,java,c语言,python)