如何读取数组中的元素,看看它是否与目标字符串匹配,尽管有双字母

时间:2016-03-07 02:27:36

标签: arrays string

所以我试图找出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;
     }
            `

1 个答案:

答案 0 :(得分:0)

我将通过上下文线索来假设这是Java。

看起来你正在逐字逐句搜索字符串。利用String.containsStream 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();
}