其实思路还好 就是输入有点难搞

Java
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
// 去掉输入字符串的方括号
if (input.startsWith("[")) input = input.substring(1);
if (input.endsWith("]")) input = input.substring(0, input.length() - 1);
// 分割输入字符串并将其转换为整数列表
String[] items = input.split(",");
ArrayList<Integer> numbers = new ArrayList<>();
for (String item : items) {
numbers.add(Integer.parseInt(item.trim())); // 去除多余空格并转换为整数
}
int n = numbers.size();
int count = 0;
// 遍历座位列表,计算可以安排的最大人数
for (int i = 0; i < n; i++) {
if (numbers.get(i) == 0) {
boolean flag = true;
// 检查前两个座位
if (i > 0 && numbers.get(i - 1) == 1) {
flag = false;
}
if (i > 1 && numbers.get(i - 2) == 1) {
flag = false;
}
// 检查后两个座位
if (i < n - 1 && numbers.get(i + 1) == 1) {
flag = false;
}
if (i < n - 2 && numbers.get(i + 2) == 1) {
flag = false;
}
// 如果该座位可以安排,计数并将其标记为已占用
if (flag) {
count++;
numbers.set(i, 1); // 将当前座位设置为已占用
}
}
}
// 输出可以安排的最大人数
System.out.println(count);
}
}
1.input.startsWith("["):
startsWith是 JavaString类的一个方法,用于检查字符串是否以指定的字符或子字符串开始。- 如果
input字符串以字符[开头,input.startsWith("[")返回true。 - 当条件为
true时,input = input.substring(1)会被执行。
2. input.substring(1):
substring是 JavaString类的另一个方法,返回一个新的字符串,这个字符串是从指定的起始位置(以 0 为基数)开始,直到原字符串的末尾。input.substring(1)表示从字符串的第二个字符(索引 1)开始,截取到字符串末尾。这样就去掉了第一个字符[。- 例如,
"[1, 0, 0, 1]".substring(1)将会返回"1, 0, 0, 1]"。
3. input.endsWith("]"):
endsWith方法用于检查字符串是否以指定的字符或子字符串结束。- 如果
input字符串以字符]结束,input.endsWith("]")返回true。 - 当条件为
true时,input = input.substring(0, input.length() - 1)会被执行。
4. input.substring(0, input.length() - 1):
input.length()返回字符串的长度。substring(0, input.length() - 1)表示从字符串的第一个字符(索引 0)开始,截取到倒数第二个字符(索引为length - 1的字符不包括在内)。- 这样做的目的是去掉字符串最后一个字符
]。 - 例如,
"1, 0, 0, 1]".substring(0, input.length() - 1)将返回"1, 0, 0, 1"。
5.split() 方法
split()是 Java 中String类的一个方法,用于根据指定的正则表达式将字符串分割为一个字符串数组。- 参数
","代表以逗号作为分隔符。 - 这个方法会扫描
input字符串中的所有逗号,并在每个逗号处分割,返回一个字符串数组items。
6.trim() 方法
trim()是String类的一个方法,用于去除字符串两端的空白字符(包括空格、制表符等)。- 它不会改变字符串中间的空格,只去除两端的空白字符。
为什么需要 trim()?
- 当你从输入中读取数据时,有时候每个元素之间可能会有多余的空格,比如
input = "1, 2, 0 , 1"。通过split(",")分割后,会得到像" 2"这样的字符串,这个字符串中有空格。 - 使用
trim()可以去掉这些多余的空格,确保你只处理纯数字部分。
示例:
" 2 ".trim()会返回"2"。"0 ".trim()会返回"0"。
C++ ihate
#include <bits/stdc++.h>
using namespace std;
int main() {
string input;
getline(cin, input);
// 去除前后的方括号
if (!input.empty() && input[0] == '[') input.erase(input.begin());
if (!input.empty() && input.back() == ']') input.pop_back();
// 解析输入为整数向量
vector<int> numbers;
stringstream ss(input);
string item;
// 用一个简单的字符串流来分割和转换
while (getline(ss, item, ',')) {
numbers.push_back(stoi(item)); // 直接使用 stoi 转换为整数
}
int n = numbers.size();
int count = 0;
for (int i = 0; i < n; i++) {
if (numbers[i] == 0) {
bool flag = true;
// 检查当前位置前面两个
if (i > 0 && numbers[i - 1] == 1) {
flag = false;
}
if (i > 1 && numbers[i - 2] == 1) {
flag = false;
}
// 检查当前位置后面两个
if (i < n - 1 && numbers[i + 1] == 1) {
flag = false;
}
if (i < n - 2 && numbers[i + 2] == 1) {
flag = false;
}
if (flag) {
count++;
numbers[i] = 1;
}
}
}
cout << count << endl;
return 0;
}




![[数据结构]二叉搜索树](https://i-blog.csdnimg.cn/direct/0fb813836949445db8115f5be8f97dd8.png)














