这是我的代码:
static String encode(String word){
char[] stringToChar = word.toLowerCase().toCharArray();
String result = word;
for (char s : stringToChar) {
if () { // if char s occurs more than once in a string word it gets replaced by ')'
result.replace(s, ')');
} else { // char s occurs only once in a string word so it gets replaced by '('
result.replace(s, '(');
}
}
return result;
}
它来自CodeWars我无法找到一种方法来检查一个字符串中是否出现过多次字符串。我知道如何替换它(我想我会这样做)但是当我尝试使用嵌套循环检查它是否在那里时,我似乎得到了一些奇怪的结果。
答案 0 :(得分:3)
你可以做到
// determine if a character has been seen
BitSet previous = new BitSet();
// determine is a character was a duplicate.
BitSet duplicate = new BitSet();
for (int i = 0; i < s.length(); i++) {
char ch = Character.toLowerCase(s.charAt(i));
if (previous.get(ch))
duplicate.set(ch);
else
previous.set(ch);
}
// create a new string in a single pass without using replace etc.
StringBuilder sb = new StringBuilder(s.length());
for (int i = 0; i < s.length(); i++) {
char ch = Character.toLowerCase(s.charAt(i));
// replace duplicates with ) and non duplicates with (
sb.append(duplicate.get(ch) ? ')' : '(');
}
这是O(n)
方法。
你需要做两次通过的原因是"(( @"
=&gt; "))(("
注意(
在结果中是如何重复的,您需要知道(
或)
是来自输入还是结果。
答案 1 :(得分:2)
您不需要更换任何可以根据您的要求使用现成功能的内容。
您可以使用:
int count = StringUtils.countMatches("String text", "char");
或
int occurance = StringUtils.countOccurrencesOf("String text", "char");
Apache Commons Lang 3 Library中提供了StringUtils
课程。
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
答案 2 :(得分:1)
首先,您的代码存在巨大缺陷。
而不是
result.replace(s, '(');
你应该写
result = result.replace(s, '(');
然后,我建议首先对字符数组进行排序(如注释中所示;有实用方法)。之后,查找和检查该数组中的字符应该很简单。
答案 3 :(得分:0)
如果您使用的是Apache Commons,可以计算一行中的出现次数,如下所示:
int count = StringUtils.countMatches(stringTocheckForAs, "A");
答案 4 :(得分:0)
如果您不允许在代码大战中导入Apache Commons(我不知道)或者由于某种原因您不想使用它,可以试试这个。
你可以初始化一个大小为26(对于A到Z)或52(对于大写和小)或甚至更大的大小的int(或短)数组(如果输入字符串也可以包含数字,符号等) ) - 将每个元素初始化为值0(零)。在输入字符串的第一次传递中,开始计算每个字符出现的次数 - 在最初初始化的数组中设置此整数值。在输入字符串的下一个传递中,一旦你有字符串中每个字符的计数,如果它只出现一次,打印'('else print')',无论如何。
这也是O(n),但彼得的解决方案更好:)
答案 5 :(得分:0)
这可以帮助通过简单的重复检查,但不检查事件计数
function isIsogram(word) {
var count = 0;
var check = ' ';
if(word == "" || word == null){
return false;
}
var newWord = word.toLowerCase();
for (var i = 0; i < newWord.length; i++){
if(check === newWord.charAt(i)){
return false;
}
for(var j = 0; j < newWord.length; j++){
if(newWord.charAt(i) === newWord.charAt(j)){
count++;
if(count > 1){
check = newWord.charAt(i);
}
}
}
count = 0;
}
return true;
};