如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'
输出一个整数,表示最长的满足要求的子串长度。
111101111
3
while True:try:string =str(raw_input())length =len(string)if length ==0:print 0start =0maxlength =0for i in range(1,length):if string[i] !=string[i-1]:if i ==length-1:maxlength =max(i-start+1,maxlength)else:passelse:maxlength =max(i-start,maxlength)start =iprint maxlengthexcept:break
#include<iostream> #include<string> using namespace std; int main() { string s,tmp,ss; bool flag=false; int res=1; cin>>s; int len=s.length(); ss=s[0]; for(int i=1;i<len;i++) { if(s[i]!=s[i-1]) { tmp=s[i]; ss.append(tmp); if(res<ss.length()) res=ss.length(); flag=true; } if(flag) { if(res<ss.length()) res=ss.length(); } else ss=s[i]; if(flag&&s[i]==s[i-1]) { if(res<ss.length()) res=ss.length(); ss=s[i]; continue; } } cout<<res<<endl; system("pause"); }
s = raw_input() def get_ans(s): leng = len(s) if len(set(s)) == 1 or leng == 1: return 1 #这里不太懂。如果全是1或者0的话,当成长度是1? s = map(int, s) dp = [0 for i in range(leng)] for i in range(1,leng): if s[i] + s[i-1] == 1: #涵盖01,10两种情况 if dp[i-1] == 0: dp[i] = 2 #刚一重新计数的时候,一下子从0变到2。如11后加个0,长度立刻变成2 else: dp[i] = dp[i-1] + 1 #其他情况,加1即可。 else: dp[i] = 0 return max(dp) print get_ans(s)