[b]追加一个问题:给你一个随机生成a到b的函数randomA()和randomB(), 用它去实现一个随机生成c到d的函数randomCD()

解决方案 »

  1.   

    第一题:
    String s = "字符串";
    for (int r = 0; r < s.length()-1; r++) {
        for (int i = r + 1; i <= s.length(); i++) {
            if (i <= s.length()) {
    String dd = s.substring(r, i);
    if (s.indexOf(dd) != -1) {
        String tmps = s.replaceAll(dd, "");
        int len=(s.length()-tmps.length())/dd.length();
        if(len>1){//只有大于一次的才记录
              System.out.println(dd+"重复出现的次数:"+len);
        }

    }
          }
    }
      

  2.   

    你给的那个例子 结果应该是abc,3吧
      

  3.   

    字符串的问题如何解决,取决于你有多大数据量,如果说数据量很小,这个问题那就太简单了,split一下,然后搞个Map保存并且每次加1就行了。如果数据量很大的话,这个问题就比较复杂了。
      

  4.   

    public class Test {
         public static void main(String[] args) {
    while (true) {
        BufferedReader br = new BufferedReader(
                                    new InputStreamReader(System.in));
        System.out.println("请输入你要查找的字符串,如要结束请键入END:");
        String s = "";
        try {
    s = br.readLine();
    if (s.equals("END") || s.equals("end")) {
        System.out.println("退出程序");
        System.exit(0);
                    }
    for (int r = 0; r < s.length()-1; r++) {
        for (int i = r + 1; i <= s.length(); i++) {
            if (i <= s.length()) {
    String dd = s.substring(r, i);
    if (s.indexOf(dd) != -1) {
        String tmps = s.replaceAll(dd, "");
        int len=(s.length()-tmps.length())/dd.length();
        if(len>1){//只有大于一次的才记录
              System.out.println(dd+"重复出现的次数:"+len);
        }

    }
          }
    }
              }
         } catch (IOException e) {
    System.out.println("程序出错:" + e.getMessage());
         }
                    }
             }
    }
      

  5.   


    楼主是“已知一个随机生成a到b的函数randomAB(), 用它去实现一个随机生成c到d的函数randomCD()”这个意思嘛?
      

  6.   

    第一个题,有好多种情况,再次不能按空格切割,因为空格也是字符。我给出一个算法,目前涵盖了我能想到的所有情况。
    最不好想的一种是这个输入:abcdefabcmodef
    上代码:
    import java.util.ArrayList;/**
     * <p>Title: TestString</p>
     * <p>Description: 输入字符串,最长重复次数的字符串,并计算其重复次数。空格也当字符处理</p>
     * @params
     * @author ZhengBing (2014-8-21 下午4:12:17)
     */
    public class TestString { public static void main(String[] args) {

    //String s = "abcabdabcmpoer";//结果为:重复字符串:abc,重复次数:2

    //String s = "abcdefabcmodef";//结果为:重复字符串:abc,重复次数:2
         //重复字符串:def,重复次数:2

    String s = "abcdyyyyopqrstabcdiiiiabcdoooopqrst";//结果为:重复字符串:opqrst,重复次数:2
    ArrayList<String> subStrings = new ArrayList<String>();
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
    for (int j = i + 1; j <= s.length(); j++) {
    String sub = s.substring(i, j);
    int c = (s.length() - s.replaceAll(sub, "").length()) / sub.length();
    if (subStrings.size() == 0) {
    if (c > 1) {
    subStrings.add(sub);
    count = c;
    }
    } else {
    if (sub.length() > subStrings.get(0).length() && c > 1) {
    subStrings.clear();
    subStrings.add(sub);
    count = c;
    } else if (sub.length() == subStrings.get(0).length() && c == count) {
    if (!subStrings.contains(sub))
    subStrings.add(sub);
    }
    }
    if (j - i - 1 >= s.length() / 2)
    break;
    }
    }
    if (subStrings.size() == 0) {
    System.out.println("未找到重复字符串。");
    } else {
    for (int i = 0; i < subStrings.size(); i++) {
    System.out.println("重复字符串:" + subStrings.get(i) + ",重复次数:" + count);
    }
    }
    }
    }
      

  7.   

    二楼,你写的,输入abcdefabcmodef会是什么结果。
      

  8.   


    abc重复出现的次数:2
    b重复出现的次数:2
    bc重复出现的次数:2
    c重复出现的次数:2
    d重复出现的次数:2
    de重复出现的次数:2
    def重复出现的次数:2
    e重复出现的次数:2
    ef重复出现的次数:2
      

  9.   


    abc重复出现的次数:2
    b重复出现的次数:2
    bc重复出现的次数:2
    c重复出现的次数:2
    d重复出现的次数:2
    de重复出现的次数:2
    def重复出现的次数:2
    e重复出现的次数:2
    ef重复出现的次数:2
    你这程序只能算是完成了一半
    内层循环没必要循环到 i <= s.length(),一半就可以了,比如:
    if (i - r - 1 >= s.length() / 2)break;
      

  10.   

    凑个热闹
    public static void main(String[] args) {
    final String chaine = "abc fghi bc kl abcd lkm abcdefg";

    String[] arr = chaine.split(" ");

    Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
    if (o1.length() != o2.length()) {
    return o1.length() < o2.length() ? -1 : 1;
    }
    return o1.compareTo(o2);
    }

    });

    String theStr = arr[arr.length - 1];
    Integer theSum = 1;

    for (int i = arr.length - 2; i >=0; i--) {
    String currentStr = arr[i];
    Integer currentSum = 1;
    for(int j = i+1; j < arr.length; j++) {
    if (arr[j].contains(currentStr))
    currentSum++;
    }
    if (currentSum > 1) {
    theStr = currentStr;
    theSum = currentSum;
    if (i == 0 || arr[i - 1].length() < currentStr.length())
    break;
    }
    }

    System.out.println( theStr + " : " +  theSum);
    }
      

  11.   


    abc重复出现的次数:2
    b重复出现的次数:2
    bc重复出现的次数:2
    c重复出现的次数:2
    d重复出现的次数:2
    de重复出现的次数:2
    def重复出现的次数:2
    e重复出现的次数:2
    ef重复出现的次数:2
    你这程序只能算是完成了一半
    内层循环没必要循环到 i <= s.length(),一半就可以了,比如:
    if (i - r - 1 >= s.length() / 2)break;恩,我之前没考虑那么多... 因为只要是字符就循环出来了