2016-06-08

Java program to Search sub array inside an array

Same Problems:
       Java 2D array Grid Search
       Search sub array inside a array
       Grid Search
       multidimensional array search

Example:
  m1 = 1 2  5  5 6 5 0
           5 2 10 5 6 5 4
           9 2 34 0 2 9 6
           1 2  5  5 6 5 6
           8 2 11 5 6 1 3
           9 2 34 0 2 9 2

search array :
                m2 :  0 2 9
                         5 6 5
                         5 6 1

Solution:




  1. import java.io.*;
  2. import java.util.*;
  3. import java.text.*;
  4. import java.math.*;
  5. import java.util.regex.*;

  6. public class Solution {
  7. public static void main(String[] args)
  8. {
  9.    /--------------------Input------ see Note--------------------
  10.     Scanner scan = new Scanner(System.in);
  11.     int steps = Integer.parseInt(scan.nextLine());
  12.     while(steps >0){
  13.         int sr = scan.nextInt();
  14.         int sc = scan.nextInt();
  15.         boolean found = false;
  16.         scan.nextLine();
  17.         int[][] m1 = new int[sr][sc];
  18.         for(int i=0;i<sr;i++){
  19.             String row = scan.nextLine();
  20.             for(int j=0;j<sc;j++){
  21.                 m1[i][j] = (int)(row.charAt(j) );
  22.             }

  23.         }
  24. /--------------------Input End--------------------------
  25.         int fr = scan.nextInt();
  26.         int fc = scan.nextInt();

  27.         scan.nextLine();
  28.         int[][] m2 = new int[fr][fc];

  29.         for(int i=0;i<fr;i++){
  30.             String row = scan.nextLine();

  31.             for(int j=0;j<fc;j++){
  32.                 m2[i][j] = (int)(row.charAt(j) );
  33.             }

  34.         }

  35.         outLoop:
  36.         for(int i=0;i<sr;i++){
  37.             for(int j=0;j<sc;j++){
  38.                 if(m1[i][j]==m2[0][0]){
  39.                    if(isMatrix(m1,m2,fr,fc,i,j) ){
  40.                        found = true;
  41.                        break outLoop;
  42.                    } else{
  43.                        found = false;
  44.                    }
  45.                 }
  46.             }
  47.         }

  48.        String r = (found==true)?"YES":"NO";
  49.        System.out.println(r);

  50.         steps--;
  51.     }
  52. }
  53. public static boolean isMatrix(int[][] m1, int[][] m2, int fr, int fc, int i, int j){
  54.     boolean found = true;
  55.     for(int a=0;a<fr;a++){
  56.         for(int b=0;b<fc;b++){
  57.             try{
  58.                 if(m2[a][b]!=m1[i+a][j+b]){                      
  59.                     return false;
  60.                 }
  61.             }
  62.             catch(Exception e){
  63.                return false;
  64.             }

  65.         }
  66.     }
  67.      return true;
  68. }
  69. }

No comments:

Post a Comment