如题,谢谢大家:提供思路也行...

解决方案 »

  1.   

    扫描整个数组,使用hashtable保存每个字符出现的次数,最后检查hashtable里有没有某个键所对应的值大于3。
      

  2.   

    hash表太杀鸡牛刀了吧?
    直接用int 数组,
    int[256] c;
    枚举每个字符,直接为相应位置的数组中的值+1,如果大于等于3直接返回true
      

  3.   

    我也比较赞同windindance(风舞轻扬) 说的,简单的循环查找就可以了boolean isMultiChar(String s) {
        char c;
        int count = 0;
        for (int i=0; i<s.length(); i++) {
            c = s.charAt(i);
            count = 0;
            for (int j=i+1; j<s.length(); j++)
            {
                if (s.charAt(j) == b) {
                    count++;
                } 
                if (count > 2) {break;}
            }
            if (count > 2) {break;}
        }
        return (count > 2);
    }
      

  4.   

    把 if (count > 2) {break;}
    改为 if (count > 1) {break;} //因为还包括c本身
      

  5.   

    是三个或三个以上的字符串(应该是连续的) 有重复值另:  c = s.charAt(i); 是什么意思?if (s.charAt(j) == b)  "b" 好像没有定义
      

  6.   

    boolean isMultiChar(String s) {
        char c;
        int count = 0;
        for (int i=0; i<s.length(); i++) {
            c = s.charAt(i); //得到字符串s的第i个字符,i从0开始的
            count = 0;
            for (int j=i+1; j<s.length(); j++)
            {
                if (s.charAt(j) == c) {  //刚才笔误,改为c
                    count++;
                } 
                if (count > 1) {break;}  //因为还包括c本身,所以只要再找到2个就符合了,即count > 1 就可以了
            }
            if (count > 1) {break;}
        }
        return (count > 1);
    }
      

  7.   

    是三个或三个以上的字符串(应该是连续的) 有重复值
    要求是连续的,那做法很多可以用charAt获得字符后,拼成一个重复的字符串,然后indexOf判断
    或者用substring每次取出连续3个字符分别判断
    boolean isMultiChar(String s) {
        String t;
        for (int i=0; i<s.length(); i++) {
            t = "";
            for (int j=0; j<3; j++) {
                t += s.charAt(i);
            }
            if (s.indexOf(t) >= 0) {return true;}
        }    return false;
    }或者
    boolean isMultiChar(String s) {
        String t;
        for (int i=0; i<s.length()-2; i++) {
            t = s.substring(i, i+3);
            if (t.charAt(0)==t.charAt(1) && t.charAt(0)==t.charAt(2)) {return true;}
        }
        return false;
    }
      

  8.   

    或者直接这样
    boolean isMultiChar(String s) {
        for (int i=0; i<s.length()-2; i++) {
            if (s.charAt(i)==s.charAt(i+1) && s.charAt(i)==s.charAt(i+2)) {return true;}
        }
        return false;
    }
    能说的我都说了,你自己参考修改吧
      

  9.   

    qybao(阿宝) 你的代码太啰嗦了 :)如果不考虑unicode如果使用int数组,如下:
    public boolean isMultiChar(String source){
    int[] charInt = new int[256];
    for(int i=0;i<source.length();i++){
              if(charInt[source.charAt(i)] ++ >= 2 )
        return true;
    }
    return false;
    }如果考虑unicode就要用hashtable或map了。
      

  10.   

    恩,如果不要求连续
    freshman113(逍遥子) 的代码确实简单
    算是学习了
      

  11.   

    public class TT {
    public static boolean test(String str){
    String s = str;
    String tmp;
    for(int i='A'; i<='Z'; i++){
    tmp = s.replaceAll((char)(i)+"{3,}", "");
    if(!s.equals(tmp)){
    //System.out.println(tmp);
    return false;
    }
    }

    for(int i='a'; i<='z'; i++){
    tmp = s.replaceAll((char)(i)+"{3,}", "");
    if(!s.equals(tmp)){
    //System.out.println(tmp);
    return false;
    }
    }

    return true;
    }

    public static void main(String args[]){
    System.out.println(test("abaaaabcccd"));
    }
    }
      

  12.   

    freshman113(逍遥子) 的代码确实简单  但我没有看懂啊,if(charInt[source.charAt(i)] ++ >= 2 ) 什么意思啊
    Int 数组 下标怎么是source.charAt(i), 一个char 啊, 
      

  13.   

    假如字符串是 "abaaaabcccd" 应该返回的是 false   但是经过测试 好像没有对的方法?
      

  14.   

    假如字符串是 "abaaaabcccd" 应该返回的是 false   
    ------------------------------------------------
    你想要的结果到底是什么?
    这里不是aaaa和ccc都是3个以上的重复连续字符了吗?
    安你的要求应该是返回ture的,怎么又变成false了呢?难道是我们误解了你的意思?
    三个及三个以上的重复字符
    是指有3个子字符串,每个子字符串都由3个以上的相同字符组成,是这个意思吗?
    那这3个子字符串要求相同还是要求不同
    比如"abaaaabccceddd"为true,而"abaaaabccceaaa"为false
    还有如果"abaaaabccceaaa"为true,那么"abaaaaaabccc"算不算true,因为中间的6个a可以看成2个3个a组成
    希望楼主把问题描述清楚一些to  windy_beijin(windy) 
    freshman113(逍遥子) 的代码确实简单  但我没有看懂啊,if(charInt[source.charAt(i)] ++ >= 2 ) 什么意思啊
    Int 数组 下标怎么是source.charAt(i), 一个char 啊, 
    -----------------------------------------------------------
    返回来的下标被转换为相应的ascii码,也就是个int了,而且,如果是非unicode,这个ascii码是在0-255之间的,所以就要定义一个int[] charInt = new int[256];容纳256个int的数组,其实一开始windindance(风舞轻扬) 就提到了,只是我没注意
      

  15.   

    不好意思  是我没有说明白  :-(应该是重复子字符串,子字符串有三个及三个以上的字符组成.
    每个子字符串都由3个以上的字符组成,  如:abc和abc   及aaa和aaa都算 true
      

  16.   

    To:windindance(风舞轻扬)
    用int[256]的确是个好办法,可惜只能处理基本Ascii码和扩展Ascii码,不能处理其它Unicode字符。
    而如果使用int[65536]我觉得必要不大,所以,我还是建议使用Hashtable。
      

  17.   

    你的意思是"abcabcd"是ture "aaabaaa"是true,"aaaaaaa"6个连续的a也是true,是吗?
    那就这样试试
    public boolean isMultiChar(String s) {
        for (int i=0; i<s.length()-2; i++) {
            if (s.substring(i+3).indexOf(s.substring(i, i+3)) >= 0) {
                return true;
            }
        }
        return false;
    }
    其实,也可以考虑用正则表达式,不过好像这个正则表达式不好写,以后有空再研究了
    今天我也闲够了,该工作了
      

  18.   

    逍遥子
    代码比较简练,佩服,是不是做J2ME的啊
      

  19.   

    public class TT {
    public static boolean test(String str){
    String s = str;
    String tmp;
    for(int i=3; i<str.length()/2; i++){
    for(int j=0; j<str.length()-2*i; j++){
    s = str;
    tmp = s.replaceAll(s.substring(j,j+i),"");
    if((s.length()-tmp.length())/i >= 2){
    return true;
    }
    }
    }

    return false;
    }

    public static void main(String args[]){
    System.out.println(test("abaabsasabccdccccc"));
    }
    }
      

  20.   


      没,我刚学JAVA不久,各位大哥多关注啊。:)
      

  21.   

    用正则:public static boolean find(int max_appear, String regular, String str)
    {
        int appear_degree = 0;
        int startIndex = 0;

        Pattern p = Pattern.compile(regular);
        Matcher m = p.matcher(str);

        while (m.find(startIndex))
        {
            appear_degree++;
            startIndex = m.end();
        }

        if (appear_degree >= max_appear)
            return true;
        
        return false;
    }