阿里笔试4.1
4.1 的场,考之前以为做完一道题提交了才能看第二题,所以第一题没通过就一直在死磕没来得及看第二题
第一题自测给出的样例和自己随便编了几个样例都是正确的,不明白为什么通过率是0
发出来思路各位指点一下到底错在哪里😭😭
题目:给一串二进制字符串如00011001,希望把他改为全为0,如果更改某个字符,那么他两边的字符也要更改,例如把第二位的0换成1,那么就变成了11111001.
如果无法变为全0,那么返回NO
以下是我的思路:
递归思想i=1~n-2,设立一个flag,flag=1表示之前的字符串s[0:i]为全零,flag=2表示s[i-1]=1,再之前的全为0,flag=0表示前方字符串除了最后一位还有其他的1无法更改
然后根据s[i]的值判断动作
n=int(input()) for i in range(n): s=list(str(input())) if len(s)==1: if s=='1': print(1) else: print(0) continue ls=len(s) if s[0]=='0': flag=1 else: flag=2 j=1 num=0 while j<ls-1 and flag: if flag==1: if s[j]=='1': flag=2 j=j+1 else: if s[j]=='1': num=num+1 if s[j+1]=='0': s[j+1]='1' else: s[j+1]='0' flag=1 j=j+1 else: flag=0 break if flag==1: if s[ls-1]=='1': flag=0 elif flag==2: if s[ls-1]=='1': flag=1 num=num+1 else: flag=0 if flag==0: print ('NO') else: print(num)
测试样例
2
01
011
输出
NO
1
以上代码测试是正确的,自己又编了几个10101输出NO,000111000输出1,都是测试正确的,不知道错在哪里了正确率为0.。。
#阿里笔试##阿里巴巴#