求一个二进制串中连续的1或连续的0出现的最大次数
求一个二进制串中连续的1或连续的0出现的最大次数。例如:s = “11100001111100011” 则返回:5
又例如:s=”01111000” 则返回:4
搜索更多相关的解决方案:
二进制
----------------解决方案--------------------------------------------------------
正好最近看到 StringTokenizer类,据说效率比indexof高很多
程序代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="10000011110000011111111111111111100000111001";
System.out.println(getMaxLength(s));
}
public static int getMaxLength(String s){
StringTokenizer stk=new StringTokenizer(s, "0");
int l=0;
while(stk.hasMoreTokens()){
String temp=stk.nextToken();
l=l>temp.length()?l:temp.length();
}
stk=new StringTokenizer(s, "1");
while(stk.hasMoreTokens()){
String temp=stk.nextToken();
l=l>temp.length()?l:temp.length();
}
return l;
}
[ 本帖最后由 shellingford 于 2012-12-18 11:20 编辑 ]
----------------解决方案--------------------------------------------------------
看了一眼 应该是最长子序列的问题 你可以上网搜一下算法
----------------解决方案--------------------------------------------------------
学习下
----------------解决方案--------------------------------------------------------
我自己也做出来了,是可以运行的,但也希望大家能把它改得更好......
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class exe4 {
public static void main(String[] args) {
String str=null;
int j=0,i=0,count;
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一串二进制数:");
str=in.readLine();
}catch(Exception e){}
int a[]=new int[str.length()]; //定义数组array,存放每个连续数字的出现次数(数组的长度不能长于str.length())
while(i<str.length()){ //当i小于二进制串的长度,就进入循环
count=1; //首先count应该为1
while(str.charAt(i)==str.charAt(i+1)){ //当两个数字相同时count加1
count++; //
i=i+1;
if(i==str.length()-1)
break;
}
a[j]=count; //数组array存放每个连续数字的出现次数
j++;
i++;
}
int max=a[0]; //先初始化 这个二进制串中连续的1或连续的0出现的最大次数为a[0]这个数值
for(int n=1;n<a.length;n++){ //判断这个二进制串中连续的1或连续的0出现的最大次数
if(a[n]>max){
max=a[n];
}
}
System.out.println("这个二进制串中连续的1或连续的0出现的最大次数为:"+max); // 输出
}
}
----------------解决方案--------------------------------------------------------
程序代码:
public static void main(String[] args) {
String b = "10000011110000011111111111111111100000111001"; int max = 0;
for (int i = 1, j = 1; i < b.length(); ++i)
if (b.charAt(i - 1) == b.charAt(i))
++j;
else {
max = Math.max(max, j);
j = 1;
}
System.out.println(max == 0 ? b.length() : max);
}
String b = "10000011110000011111111111111111100000111001"; int max = 0;
for (int i = 1, j = 1; i < b.length(); ++i)
if (b.charAt(i - 1) == b.charAt(i))
++j;
else {
max = Math.max(max, j);
j = 1;
}
System.out.println(max == 0 ? b.length() : max);
}
[ 本帖最后由 lz1091914999 于 2012-12-18 22:03 编辑 ]
----------------解决方案--------------------------------------------------------