我解决了一个问题。通常,必须将初始字符串转换为新字符串,将所有重复字符替换为右括号')',并将所有唯一字符替换为左括号'('。
我的决定:
public class DuplicateEncoder {
static String encode(String word) {
String newWord = "";
char[] chArray = word.toCharArray();
for (int i = 0; i < word.length(); i++) {
if (word.chars().filter(num -> num == chArray[i]).count() > 1)
{ newWord = newWord + "("; }
else
{ newWord = newWord + ")"; }
}
return newWord;
}
}
它有这个错误:
/workspace/java/src/DuplicateEncoder.java:6: error: local variables referenced from a lambda expression must be final or effectively final
if (word.chars().filter(num -> num == chArray[i]).count() > 1)
^
1 error
如何修复此错误?
lambda 表达式捕获的本地值必须是有效的 final。例如,这可以通过创建- 变量来实现
final:通常,您可以重写解决方案,使其不适用于
O(n^2),而是适用于O(n)(n- 单词的长度)。要做到这一点,遍历单词两次就足够了:第一次计算字符出现的次数并将结果存储在 中
Map,第二次根据来自 的数据收集最终的字符串Map。此外,要收集字符串,最好使用
StringBuilder字符串连接而不是字符串连接。最终代码:
PS我去了任务站点-您还需要忽略字母的大小写,将其添加到代码中