在字符串中查找并显示连续重复组合

时间:2016-05-23 14:21:14

标签: java string count set

  

EG。输入:NaNaNaBCCBBNa输出:Na3 B1 C2 B2 Na1   输入:NaNaBCNaNaCBBNa输出:Na2 B1 C1 Na2 B2 Na1

我试着这样做 使用选择排序类型技术

String input;
for (int i = 0; i < stringlength; i++) {
    for (int j = 1 ; j < stringlength; j++) {
        if (input.substring(i, i + 1).equals(input.substring(j, j + 1)) {
            count++;
        } else {
            break;
        }
    }
    userAnswer += input.substring(i, i + 1) + Integer.toString(count);
    i = i + (count-1); // to skip repeated characters
}

我们必须数集 Set被认为是One Capital Alphabet +连续的下一个小字母(例如Na NOT CC或BB那些只是C或B,不是小字符)

以上代码粗略算法(它有语法错误) 欢迎所有建议

终于解决了。

2 个答案:

答案 0 :(得分:1)

这是我将使用的方法。在正则表达式中将字符串拆分为大写字母,然后我们将迭代这些项并构建从元素到整数的映射。我们将添加或增加。完成后,我们可以使用String.format();查看项目,以便清楚。

UPDATED the code had not counted correctly.




   // Get User Input, replace my string with the users input below

    String[] elementArray = "NaNaNaNaBBCCDDE".split("(?=[A-Z])");

    Map<String, Integer> counts = new HashMap<>();

    for(String element : elementArray){

        Integer count = counts.get(element);
        if(count == null){
            counts.put(element, 1);
        } else {
            counts.replace(element, count + 1);
        }
    }

    for(Map.Entry<String, Integer> mapEntry : counts.entrySet()){
        System.out.println(String.format("Element: %s%d", mapEntry.getKey(), mapEntry.getValue()));
    }




Output:

    Success time: 0.11 memory: 320512 signal:0

Element: B2
Element: Na4
Element: C2
Element: D2
Element: E1

答案 1 :(得分:0)

答案是遵循算法

String input;
for (int i = 0; i < stringlength; i++) {
    int count = 1; //<<<
       for (int j = /*>>>*/i + 1 /*<<<*/; j < stringlength; j++) {
        if (input.substring(i, i + 1).equals(input.substring(j, j + 1)) {
            count++;
        } else {
            break;
        }
    }
    userAnswer += input.substring(i, i + 1) + Integer.toString(count);
    i = i + (count-1); // to skip repeated characters <<<
}

更改用箭头表示&gt;&gt;&gt; &LT;&LT;&LT;