当前位置: 代码迷 >> Java相关 >> 求一个二进制串中连续的1或连续的0出现的最大次数
  详细解决方案

求一个二进制串中连续的1或连续的0出现的最大次数

热度:515   发布时间:2012-12-17 23:41:06.0
求一个二进制串中连续的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);
}


[ 本帖最后由 lz1091914999 于 2012-12-18 22:03 编辑 ]
----------------解决方案--------------------------------------------------------
  相关解决方案