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,不是小字符)
以上代码粗略算法(它有语法错误) 欢迎所有建议
终于解决了。
答案 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;