大家好!作为培训的一部分,我解决了一个问题。 条件如下:编写一个以String为参数的方法,如果String中的字符重复(例如Balalaika ),则将重复的字符更改为字符')'。也就是说,字母 "a" 和 "l" 将被替换为 ")" 并且你得到"B)))))yk)"。并且所有其他字符都被替换为 "("。结果,你得到"()))))(()"。
为了解决这个问题,我写了如下代码(不要扔拖鞋,我是初学者):
static String encode(String word){
char [] arr = word.toCharArray();
//search for duplicates
for (int i = 0; i<arr.length;i++){ // Bug
for(int j=i+1;j<arr.length;j++){
if (arr[i]==arr[j]){
arr [i] = ')';
arr [j] = ')';
}
}
}
for (int k = 0; k<arr.length;k++){
if(!(arr[k]==')')){
arr[k] = '(';
}
}
word = new String(arr);
return word;
}
它甚至部分有效,但不完全有效。问题是当循环循环时,它会改变两个字符,但如果单词中还有另一个这样的字符,它会跳过它,因为这两个已经被替换并且它们不匹配。告诉我如何解决这个问题?
如果发现重复,
i
则应在嵌套循环之后更改按索引的当前符号。因此,如果该字符在字符串中是唯一的,您可以立即将此字符设置为。(
此外,如果当前字符已经设置为
)
重复,您可以跳过在嵌套循环中检查它,并使用continue
跳过迭代。测试:
如果输入字符串可以包含字符
')'
和/或'('
,那么您应该使用布尔值的辅助数组来检测重复项,并已通过该数组中的值构建结果字符串:测试: