所以我试图找出String在数组中出现的次数。因此,如果我有一个{AB,ABBBB,AAAABBB,AC}数组,并且我的目标字符串为AB,则字符串AB的频率在数组中为3。该程序将忽略重复的ABBBB和AAAABBBB,并将这些元素作为AB读取。我有我的代码将重复序列更改为非重复序列,然后使用if语句将其与目标进行比较,但它不起作用,我不知道为什么。 `当应该有一个数字时,它只返回一个零值。
这是代码:
public static int findFreqWithMutations (String target, String [] arr) {
int count=0;
for (String s:arr) {
String ans= "";
for (int i=0; i<s.length()-1; i++) {
if (s.charAt(i) != s.charAt(i+1)) {
ans= ans + s.charAt(i);
}
}
if (ans == target) {
count++;
}
}
return count;
}
`
答案 0 :(得分:0)
我将通过上下文线索来假设这是Java。
看起来你正在逐字逐句搜索字符串。利用String.contains
和Stream API
public static int findFreqWithMutations (String target, String[] arr) {
return Arrays.stream(arr)
.mapToInt(item -> item.contains(target) ? 1 : 0)
.sum();
}
修改强>
Charles提出了一个很好的观点,我没有足够的背景知道 AB 是否应被视为对 AAABBBCCC 的打击或许 ABC 将是唯一适用的命中。此外, AB 不会受到 AAABBBCCC 的影响,因为该字符串会编译为 ABC 。
如果是这种情况,这里有一种替代方法,可以将每个字符串映射到只包含不同字符的字符串。
public static int occurrences(String[] array, String target) {
return Arrays.stream(array)
.map(item -> item.codePoints().distinct().collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString())
.mapToInt(item -> item.equals(target) ? 1 : 0)
.sum();
}