2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)
题目描述
均衡串定义: 字符串只包含两种字符,且两种字符的个数相同。
给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。
约定字符串中只包含大写的X和Y两种字符。
输入描述
均衡串: XXYYXY
字符串的长度[2,100001]。给定的字符串均为均衡串
输出描述
可分割为两个子串:
XXYY
XY
备注
分割后的子串,是原字符串的连续子串。
用例1
输入
XXYYXY
输出
2
用例23
输入
XYYXXYXXYY
输出
4
考点
逻辑分析
解题思路
初始化计数器变量 count 为0,用于统计当前遍历到的 ‘X’ 和 ‘Y’ 的数量差值;
初始化结果变量 res 为0,用于记录分割出的均衡子串的数量。遍历整个输入字符串:
当遇到字符 ‘X’ 时,将 count 加1;
当遇到字符 ‘Y’ 时,将 count 减1;
当 count 变为0时,说明从字符串起始位置到当前位置形成了一个均衡子串,因此将结果变量 res 加1。最后,输出结果变量 res,即为所求的均衡子串的最大个数。
代码
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
cin>>str;
int count=0, res=0;
for(int i=0;i<str.size();i++) {
if(str[i]=='X'){
count++;
}else{
count--;
}
if(count==0){
res++;
}
}
cout<<res<<endl;
system("pause");
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int countX = 0;
int countY = 0;
int ans = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'X') {
countX++;
} else {
countY++;
}
if (countX == countY) {
ans++;
}
}
System.out.println(ans);