【问题标题】:Searching char arrays to see if the char matches搜索 char 数组以查看 char 是否匹配
【发布时间】:2019-03-28 12:50:13
【问题描述】:

我有两个 char 数组,它们以两个字符串作为输入。如果任一侧的 char 具有匹配的 char,例如将 char 数组转换为字符串 char A 和 B 都至少有一个 H 或 R,那么它将返回 true。如果不是,则返回 false。

>char[] A = foo(A).toCharArray();
>
>char[] B = foo(B).toCharArray();
>
>System.out.println("String "+A+": "+Arrays.toString(A));
>
>System.out.println("String "+B+": "+Arrays.toString(B));

>String A: [H,  , R,  ]
>
>String B: [R,  , R, R]
>>This will return true

>String A: [ , H,  , R]
>
>String B: [H, H,  , H]
>>This will return true

>String A: [H,  , H,  ]
>
>String B: [R,  , R,  ]
>>This will return false

我很困惑如何制定这样的规则?

【问题讨论】:

  • 匹配的字符是否作为输入给出?还是第一个数组中的任何字符?

标签: java


【解决方案1】:

您可以在此处使用java.util.Set,这将在一次迭代中给出结果。使用java.util.TreeSet 可以进一步减少执行时间,因为它消除了重复

public static void main(String[] args) {
    char[] A = "HR".toCharArray();
    char[] B = "RRR".toCharArray();

    Set<Character> set = new TreeSet<>();
    boolean flag = false;
    for(char c : A) {
        set.add(c);
    }
    for(char c : B) {
        if(set.contains(c)) {
            System.out.println(true);
            flag = true;
            break;
        }
    }
    if(!flag) {
        System.out.println(false);
    }
}

【讨论】:

    【解决方案2】:

    您可以做的是使用 For 在矩阵中迭代并验证当前项目是“R”还是“H”。

    boolean returnedValue = false;
    
    for(int i = 0; i< B.length; i++){
      char currentItem = B[i];
      if(currentItem == 'R' || currentItem == 'H'){
        returnedValue = true;
     }
    }
    
    return returnedValue;

    【讨论】:

    • 第一个数组在哪里?您只检查“H”或“R”是否在第二个数组中。
    【解决方案3】:

    使用第一个循环从第一个数组中获取每个元素。

    使用第二个循环检查第二个数组中的第一个元素。

    检查第一个数组中的当前值是否等于 H 或 R。

    如果是,检查它是否在第二个数组中并返回true。

    public static boolean check() {
            String s1 = "ABHEEF", s2 = "RDDFVW";
            char[] arr1 = s1.toCharArray();
            char[] arr2 = s2.toCharArray();
    
            for (int i = 0; i < arr1.length; i++) {
                for (int j = 0; j < arr2.length; j++) {
                    if(arr1[i] == 'H' || arr1[i] == 'R') {
                        if(arr1[i] == arr2[j])
                            return true;
                    }
    
                }
            }
            return false;
        }
    

    【讨论】:

      【解决方案4】:

      你所要做的就是添加一个嵌套循环

      for(int i = 0; i < A.length; i++){
            for(int j = 0; j < B.length; j++){
                   if(if B[j] ==A [i]){
                        return true
                   }
            }
      }
      
              return false;
      

      【讨论】:

        【解决方案5】:

        使用 Java 1.8,您可以执行以下操作:

        //@Momir Sarac
        String text1 = "b9H ello";
        String text2 ="avn1c fk";
        // 32 is for empty space character here, you could do i != ' ' and it would be the same
        //turn text1 into intstream each int corresponding to it's char value
        //filter empty space ints
        //get only distinct out of them
        //take a look for any match if some int is contained within text2
        boolean result = text1.chars().filter(i->i != 32).distinct().anyMatch(character->text2.contains(String.valueOf(character)) || text2.lastIndexOf(character) != -1);
        //print it on screen
        System.out.printf("Two texts %s same letter(s).", result ? "have" : "don't have");
        

        【讨论】:

          猜你喜欢
          • 2014-05-27
          • 2016-03-17
          • 1970-01-01
          • 2018-04-20
          • 2010-12-01
          • 2018-12-15
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          相关资源
          最近更新 更多