Поиск в массивах символов, чтобы узнать, совпадает ли символ

#java

#java

Вопрос:

У меня есть два массива символов, которые принимают две строки в качестве входных данных. Если символ с обеих сторон имеет соответствующий символ, например, после преобразования массивов символов в строку, символы 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
  

Я в замешательстве, как создать такое правило?

Комментарии:

1. Задается ли соответствующий символ в качестве входных данных? или это любой символ из первого массива?

Ответ №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;  

Комментарии:

1. Где первый массив? Вы только проверяете, находятся ли ‘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");