【华为OD】C卷真题 200分 100%通过:求满足条件的最长子串的长度 C/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 
using namespace std;

int getMaxStrLength(string s) {
	int left = 0;
	int right = 0;
	int max = 0;
	int cnt = 0;
	while (right < s.size()) {
		cnt = 0;
		while (right < s.size()) {
			if (isalpha(s[right])) {
				cnt += 1;
			}
			if (cnt == 2) {
				break;
			}
			right++;
		}

		max = max < right - left ? right - left : max;
		if (cnt < 2) {
			break;
		}

		while (left < right) {
			if (isalpha(s[left])) {
				cnt -= 1;
			}
			left++;
			if (cnt == 1) {
				break;
			}
		}
	}
	return max;
}

int main() {
	string s;
	cin >> s;
	int cnt1 = 0;
	int cnt2 = 0;
	for (auto i : s) {
		isdigit(i) ? ++cnt1 : ++cnt2;
	}
	if (cnt1 == s.size() || cnt1 == 0) {
		cout << -1 << endl;
		return 0;
	}
	cout << getMaxStrLength(s) << endl;
	return 0;
}

3c93373b3c3042e9bf1adf97a377ad94.jpeg

 

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