题目:
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至
少一个空位才允许落座。现在给出一排观众座位分布图Q,座位中存在已落座的观众,请计
算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
输入描述
一个数组,用来标识某一排座位Q中,每个座位是否已经坐人。o表示该座位没有坐人,1表
示该座位已经坐人。
输出描述
整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
示例1输入输出Q示例仅供调试,后台判题数据一般不包含示例
输入
10001
输出
1
示例2
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
0101
输出
0
备注
1<=数组长度<=10000
题解:
这个可以将字符串变为char型数组,然后判断条件就是在中间位置的时候 第i-1位,i位,i+1位都是0,然后将第i位变成1继续判断。
其中两个边界的特殊情况,开始1,2位都是0,那么这种情况可以直接将第一个变为1
另外就是倒数第3位是1,但倒数第2,1位是0,可以将最后一个变为1.
按照这个逻辑计算就可以了。
import java.util.Scanner;
public class FindSeat {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String posStr = sc.nextLine();
int count = 0;
char[] posCharArr = new char[posStr.length()];
for (int i = 0; i < posStr.length(); i++) {
posCharArr[i] = posStr.charAt(i);
}
for (int i = 0; i < posStr.length(); i++) {
if (i == 0 && posCharArr[i] == '0' && posCharArr[i + 1] == '0') {
count++;
posCharArr[i] = '1';
continue;
}
if (posStr.length() <= 1) {
continue;
}
if (i > 0 && i < posStr.length() - 2 && posCharArr[i] == '0' //中间位置判断,这个时候i>0,因为i=0那种特殊情况前面已经判断了
&& posCharArr[i - 1] == '0' && posCharArr[i + 1] == '0') {
count++;
posCharArr[i] = '1';
continue;
}
if (i == posStr.length() - 2 && posCharArr[i] == '0'
&& posCharArr[i - 1] == '1' && posCharArr[i + 1] == '0') {
count++;
posCharArr[i + 1] = '1';
continue;
}
}
System.out.println(count);
}
}
验证: