题目:
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至
少一个空位才允许落座。现在给出一排观众座位分布图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);}
}
验证: