原题链接作者 : Xia Xinyu
日期 : 2021-10-02
给定一个 01 串,如果同时满足下列两个条件,则输出Yes,否则输出No:
不存在两个相邻的 1
每个 0 两边至少有一个 1
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据第一行包含整数 n。
第二行包含一个长度为 n 的 01 字符串。
输出格式
每组数据输出一行结果,如果同时满足两个条件,输出 Yes,否则输出 No。
数据范围
前三个测试点满足,1≤n≤100。
所有测试点满足,1≤T≤10,1≤n≤1000。
同一测试点内,所有 n 相加之和不超过 1000。
输入样例:
3
3
101
4
1011
5
10001
输出样例:
思路:仔细读题才行,因为不细心卡了好久,重点是每个0的两边至少有一个1这句话的意思是在0的两边可以有一个1也可以有两个1 代码Yes
No
No
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while(T -- != 0){
boolean flag = true;
int n = in.nextInt();
String s = in.next();
for(int i = 0;i < s.length() - 1;i ++){
if(s.charAt(i) == '1' && s.charAt(i + 1) == '1'){
flag = false;
break;
}
}
for(int i = 1;i < s.length() - 1;i ++){
if(s.charAt(i) == '0'){
if(s.charAt(i - 1) != '1' && s.charAt(i + 1) != '1')
{
flag = false;
break;
}
}
}
if(s.length() > 1 && ((s.charAt(0) == '0' && s.charAt(1) == '0') ||(s.charAt(s.length() - 1)) == '0' && (s.charAt(s.length() - 2) == '0')))
flag = false;
if(s.length() == 1 && s.charAt(0) == '0') flag = false;
if(flag) System.out.println("Yes");
else System.out.println("No");
}
}
}
时间复杂度:O(n) n为01字符串的长度
空间复杂度:O(1)


