Epic Systems Interview Question for Software Engineer / Developers


Country: United States




Comment hidden because of low score. Click to expand.
2
of 2 vote

public static boolean findWord(char[][] matrix, String word) {
        char[] chars = word.toCharArray();

        int rowLen = matrix.length;
        int colLen = matrix[0].length;

        if (word.length() > rowLen || word.length() > colLen) {
            return false;
        }

        int charPoint = 0;

        // scan rows
        for (int i = 0; i < rowLen; i++) {
            for (int j = 0; j < colLen; j++) {

                if (chars[charPoint] == matrix[i][j]) {
                    charPoint++;
                    if (charPoint == word.length() - 1) {
                        return true;
                    }
                } else {
                    charPoint = 0;
                }
            }
        }

        // scan cols
        charPoint = 0;
        for (int j = 0; j < colLen; j++) {
            for (int i = 0; i < rowLen; i++) {

                if (chars[charPoint] == matrix[i][j]) {
                    charPoint++;
                    if (charPoint == word.length() - 1) {
                        return true;
                    }
                } else {
                    charPoint = 0;
                }
            }
        }

        // scan diagonal
        charPoint = 0;
        for (int i = 0; i < rowLen; i++) {

            if (chars[charPoint] == matrix[i][i]) {
                charPoint++;
                if (charPoint == word.length() - 1) {
                    return true;
                }
            } else {
                charPoint = 0;
            }
        }

        return false;
    }

- Anonymous March 04, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

Can the word only be present entirely in a row/column/diagonal? cant it be across multiple rows and columns?

- Praba March 23, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

For the diagonals, you have only implemented the logic for the diagonal going from top-left to bottom-right. You also need to implement it for the other diagonal going from top-right to bottom-left.

Other than that, perfect solution!

- Nikhilesh March 29, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

When scanning the rows, what if the matrix contains aab and the word we are looking for is ab ?
when j==0, charPoint will be 1.
when j==1, charPoint will be 0. But we again need to compare the chars[0] with matrix[0][1] right ?
I don't think that is being compared.

- shravan July 07, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

This doesn't work if the last character is incorrect. For example, in the array

char[][] matrix = {{'a','b','c'},{'d','e', 'f'}, {'g','h','i'}};

If you enter in the word: "abp", the function returns true

- adubashi November 09, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

if(matrix[i][j] != chars[charPoint]){
        			charPoint = 0;
        			continue;
        		} else {
        			if(chars[charPoint] == chars[word.length()-1]){
        				return true;
        			}
        			charPoint++;
        		}

Change the code inside your two for loops to the above code to make it work for the case if the last character is incorrect

- adubashi November 09, 2015 | Flag
Comment hidden because of low score. Click to expand.
1
of 1 vote

import java.io.*;
import java.util.*;
 
public class Matrix_pattern_search
{
    static char a[][]=  { {'\0','\0','\0','\0','\0','\0','\0'},
                     {'\0','r','o','h','d','n','\0'},
                     {'\0','b','o','x','a','p','\0'},
                     {'\0','a','r','h','a','c','\0'},
                     {'\0','r','o','h','a','n','\0'},
                     {'\0','r','m','j','i','o','\0'},
                     {'\0','\0','\0','\0','\0','\0','\0'}};// instance variables - replace the example below with your own
    static String s="han";

    public static void main()
    {
      
    
                     
      for(int i=0;i<7;i++)
      {
        for(int j=0;j<7;j++)
        {
          System.out.print(a[i][j]+"  ");
        }
        System.out.println();
      }
     System.out.println();
     
     for(int i=1;i<a.length;i++)
     {
       for(int j=1;j<a[i].length;j++)
       {
         if(a[i][j]==s.charAt(0))
            search(i,j);
       }
     }
    }
    
    static void search(int i,int j)
    {
      int k=1;
      if(a[i-1][j-1]==s.charAt(k))
         go_towards(i-1,j-1,1);
      else if(a[i-1][j]==s.charAt(k))
         go_towards(i-1,j,2);
       else if(a[i-1][j+1]==s.charAt(k))
         go_towards(i-1,j+1,3);
       else if(a[i][j+1]==s.charAt(k))
         go_towards(i,j+1,4);
      else if(a[i+1][j+1]==s.charAt(k))
         go_towards(i+1,j+1,5);
      else if(a[i+1][j]==s.charAt(k))
         go_towards(i+1,j,6);
      else if(a[i+1][j-1]==s.charAt(k))
         go_towards(i+1,j-1,7);
      else if(a[i][j-1]==s.charAt(k))
         go_towards(i,j-1,8);
    }
    static void go_towards(int i,int j,int c)
    {
        int flag=0;
        int k=2;
        int i1,j1;
        switch(c)
        {
          case 1: i1=i+1;
                  j1=j+1;
                  while(k<s.length())
                  {
                    if(a[--i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 2: i1=i+1;
                  j1=j;
                  while(k<s.length())
                  {
                    if(a[--i][j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 3: i1=i+1;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[--i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 4: i1=i;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break; 
          
          case 5: 
                  i1=i-1;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[++i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                    System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          case 6: i1=i-1;
                  j1=j;
          
                  while(k<s.length())
                  {
                    if(a[++i][j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                    System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 7: i1=i-1;
                  j1=j+1;
          
                  while(k<s.length())
                  {
                    if(a[++i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
         
          case 8:i1=i;
                  j1=j+1;
          
                  while(k<s.length())
                  {
                    if(a[i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
    
    
      }
  }
}

- Anindya K Das March 03, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

????????......

- sumit.polite March 03, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

import java.io.*;
import java.util.*;

public class Matrix_pattern_search
{
static char a[][]= { {'\0','\0','\0','\0','\0','\0','\0'},
{'\0','r','o','h','d','n','\0'},
{'\0','b','o','x','a','p','\0'},
{'\0','a','r','h','a','c','\0'},
{'\0','r','o','h','a','n','\0'},
{'\0','r','m','j','i','o','\0'},
{'\0','\0','\0','\0','\0','\0','\0'}};// instance variables - replace the example below with your own
static String s="han";

public static void main()
{



for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
System.out.println();

for(int i=1;i<a.length;i++)
{
for(int j=1;j<a[i].length;j++)
{
if(a[i][j]==s.charAt(0))
search(i,j);
}
}
}

static void search(int i,int j)
{
int k=1;
if(a[i-1][j-1]==s.charAt(k))
go_towards(i-1,j-1,1);
else if(a[i-1][j]==s.charAt(k))
go_towards(i-1,j,2);
else if(a[i-1][j+1]==s.charAt(k))
go_towards(i-1,j+1,3);
else if(a[i][j+1]==s.charAt(k))
go_towards(i,j+1,4);
else if(a[i+1][j+1]==s.charAt(k))
go_towards(i+1,j+1,5);
else if(a[i+1][j]==s.charAt(k))
go_towards(i+1,j,6);
else if(a[i+1][j-1]==s.charAt(k))
go_towards(i+1,j-1,7);
else if(a[i][j-1]==s.charAt(k))
go_towards(i,j-1,8);
}
static void go_towards(int i,int j,int c)
{
int flag=0;
int k=2;
int i1,j1;
switch(c)
{
case 1: i1=i+1;
j1=j+1;
while(k<s.length())
{
if(a[--i][--j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 2: i1=i+1;
j1=j;
while(k<s.length())
{
if(a[--i][j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 3: i1=i+1;
j1=j-1;
while(k<s.length())
{
if(a[--i][++j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 4: i1=i;
j1=j-1;
while(k<s.length())
{
if(a[i][++j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 5:
i1=i-1;
j1=j-1;
while(k<s.length())
{
if(a[++i][++j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;
case 6: i1=i-1;
j1=j;

while(k<s.length())
{
if(a[++i][j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 7: i1=i-1;
j1=j+1;

while(k<s.length())
{
if(a[++i][--j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;

case 8:i1=i;
j1=j+1;

while(k<s.length())
{
if(a[i][--j]!=s.charAt(k))
{
flag=1; break;
}
k++;
}
if(flag==0)
System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
break;


}
}
}

- Anonymous March 03, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

import java.io.*;
import java.util.*;
 
public class Matrix_pattern_search
{
    static char a[][]=  { {'\0','\0','\0','\0','\0','\0','\0'},
                     {'\0','r','o','h','d','n','\0'},
                     {'\0','b','o','x','a','p','\0'},
                     {'\0','a','r','h','a','c','\0'},
                     {'\0','r','o','h','a','n','\0'},
                     {'\0','r','m','j','i','o','\0'},
                     {'\0','\0','\0','\0','\0','\0','\0'}};// instance variables - replace the example below with your own
    static String s="han";

    public static void main()
    {
      
    
                     
      for(int i=0;i<7;i++)
      {
        for(int j=0;j<7;j++)
        {
          System.out.print(a[i][j]+"  ");
        }
        System.out.println();
      }
     System.out.println();
     
     for(int i=1;i<a.length;i++)
     {
       for(int j=1;j<a[i].length;j++)
       {
         if(a[i][j]==s.charAt(0))
            search(i,j);
       }
     }
    }
    
    static void search(int i,int j)
    {
      int k=1;
      if(a[i-1][j-1]==s.charAt(k))
         go_towards(i-1,j-1,1);
      else if(a[i-1][j]==s.charAt(k))
         go_towards(i-1,j,2);
       else if(a[i-1][j+1]==s.charAt(k))
         go_towards(i-1,j+1,3);
       else if(a[i][j+1]==s.charAt(k))
         go_towards(i,j+1,4);
      else if(a[i+1][j+1]==s.charAt(k))
         go_towards(i+1,j+1,5);
      else if(a[i+1][j]==s.charAt(k))
         go_towards(i+1,j,6);
      else if(a[i+1][j-1]==s.charAt(k))
         go_towards(i+1,j-1,7);
      else if(a[i][j-1]==s.charAt(k))
         go_towards(i,j-1,8);
    }
    static void go_towards(int i,int j,int c)
    {
        int flag=0;
        int k=2;
        int i1,j1;
        switch(c)
        {
          case 1: i1=i+1;
                  j1=j+1;
                  while(k<s.length())
                  {
                    if(a[--i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 2: i1=i+1;
                  j1=j;
                  while(k<s.length())
                  {
                    if(a[--i][j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 3: i1=i+1;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[--i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 4: i1=i;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break; 
          
          case 5: 
                  i1=i-1;
                  j1=j-1;
                  while(k<s.length())
                  {
                    if(a[++i][++j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                    System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          case 6: i1=i-1;
                  j1=j;
          
                  while(k<s.length())
                  {
                    if(a[++i][j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                    System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
          
          case 7: i1=i-1;
                  j1=j+1;
          
                  while(k<s.length())
                  {
                    if(a[++i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
         
          case 8:i1=i;
                  j1=j+1;
          
                  while(k<s.length())
                  {
                    if(a[i][--j]!=s.charAt(k))
                    {
                        flag=1; break;
                    }
                    k++;
                  }
                  if(flag==0)
                     System.out.println("String: "+ s +" is present at index: ["+i1+","+j1+"]");
                  break;
    
    
      }
  }
}

- Anindya March 03, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

Some rather inelegant solutions here.

char arr[] = {'a', 'b', 'c', 'd', 
              'e', 'f', 'g', 'h', 
              'i', 'j', 'k', 'l', 
              'm', 'n', 'o', 'p' };

char* strstr_stride(int n, char* pStr, int stride, char* pSubStr)
{
   for(int j = 0; n-j >= strlen(pSubStr); pStr += stride,j++)
   {
      int i = 0;
      for (; pSubStr[i] && (pStr[i*stride] == pSubStr[i]); i++);
      if (!pSubStr[i])
         return pStr;
   }
   return NULL;
}

bool CheckMat(char* pMat, int n, char* pSearch)
{
   for (int i = 0; i < n; i++) //horiz & vert
      if (strstr_stride(n, pMat + n*i, 1, pSearch) || strstr_stride(n, pMat + i, n, pSearch))
         return true;
   return strstr_stride(n, pMat, n+1, pSearch) || strstr_stride(n, pMat+n-1, n-1, pSearch); //diags
}

void main()
{
   char* test[] = {"nop", "nope", "dgj", "dgk"};
   for (int i = 0; i < sizeof(test)/sizeof(test[0]); i++)
      printf("%s = %d\n", test[i], CheckMat(arr, 4, test[i]));
   getch();
}

- tjcbs2 March 04, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

output:

nop = 1
nope = 0
dgj = 1
dgk = 0

- tjcbs2 March 04, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

// I assume diagonal only means upper-left to lower-right.

typedef char matrix[N][N];

bool find(string word, matrix a){
    string::size_type len =word.length();
    for (int i=0; i< N; ++i) {
        for (int j=0 ; j< N; ++j) {
            if (a[i][j]==word[0]){
                
                bool horizontal=true;
                bool vertical=true;
                bool diagonal=true;
                
                for (int k=1; k< len; ++k){
                    if (j+k>= N || word[k]!= a[i][j+k]) { horizontal= false; break;}
                }
                if (horizontal ==true) return true;
                for (int k=1; k< len; ++k){
                    if (i+k>= N || word[k]!= a[i+k][j]) { vertical = false; break;}
                }
                if (vertical ==true) return true;
                for (int k=1; k<len; ++k){
                    if (i+k>= N || j+k>= N || word[k]!= a[i+k][j+k]) { diagonal = false; break;}
                }
                if (diagonal == true) return true;
            }
        }
    }
    
    return false;
}

- Anonymous March 04, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

import java.util.Scanner;
public class MatrixDic{
    static char a[][]=  { {'r','o','h','d','n'},
                     {'b','o','x','a','p'},
                     {'a','r','h','a','c'},
                     {'r','o','h','a','n'},
                     {'r','m','j','i','o'} };
 
    public static void main(String []args){
	    Scanner in=new Scanner(System.in);
	    String str=in.nextLine();
		int f=0;
		for(int i=0;i<5;i++){
		    for(int j=0;j<5;j++){
			    if(a[i][j]==str.charAt(0))
				  f=find(i,j,str);
				if(f==1){
				   break; 	
				}	
			}
		
		}
		if(f==0)
		    System.out.print("false");
		else{
		   System.out.print("true"); 
		}	
	 }
	 public static int find(int i,int j,String str){
	      int k=1;
		  int fl=0;
		  //row forword
		  for(;k<str.length();k++){
		      j++;
			  if(j<5){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			}	   
		  }
		  //row backword
		  if(fl==0){
		      for(;k<str.length();k++){
		      j--;
			  if(j>=0){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			  }	   
		   }
		  }
		    
		 //col forword
		 if(fl==0){
		      for(;k<str.length();k++){
		      i++;
			  if(i<5){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			  }	   
		   }
		  }
         // col backword
		 if(fl==0){
		      for(;k<str.length();k++){
		      i--;
			  if(i>=0){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			  }	   
		   }
		  }
		  
		 //dia forword
		 if(fl==0){
		      for(;k<str.length();k++){
		      j++; i++;
			  if(j<5&&i<5){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			  }	   
		   }
		  }
		  //dia backword
		  if(fl==0){
		      for(;k<str.length();k++){
		      j--;i--;
			  if(i>=0&&j>=0){
		      if(a[i][j]==str.charAt(k))
			       fl=1;
			  else
			       fl=0;
			  }	   
		   }
		  }
		 return fl;
	 }
}

- sadhanaj28 March 12, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

public class wordinMatrix {
	
	
	public static boolean find(char[][] matrix, int[] index, char c)
	{
		for(int i=0; i<matrix.length; i++)
		{
			for(int j=0; j<matrix[i].length; j++)
			{
				if(matrix[i][j]==c)
				{
					index[0] = i;
					index[1] = j;
					return true;
				}
			}
		}
		
		return false;
	}
	
	public static void main(String[] args)
	{
		char matrix[][] = {{'n','a','h','i'},
					 	   {'o','u','i','f'},
					       {'n','t','d','a'},
					       {'e','i','e','e'}};
		
		//String str = "nude";
		String str = "none";
		if(str.length()>4)
		{
			System.out.println("String is invalid");
			return;
		}
		
		int [] index = new int [2];
		if(find(matrix, index, str.charAt(0)))
		{
			
			System.out.println("Checking");
			int i = index[0];
			int j = index[1] + 1;
			
			System.out.println(i+","+j);
			
			boolean flag = true;
			// col check
			for(int k=1; j<matrix.length; j++,k++)
			{
				if(str.charAt(k)!=matrix[i][j])
				{
					flag = false;
					break;
				}
			}
			
			if(flag == true)
			{
				System.out.println("Found in Column");
				return;
			}
			
			// row check
			i = index[0] + 1;
			j = index[1];
			flag = true;
			for(int k=1; i<matrix.length; i++,k++)
			{
				if(str.charAt(k)!=matrix[i][j])
				{
					flag = false;
					break;
				}
			}

			if(flag == true)
			{
				System.out.println("Found in Row");
				return;
			}
			
			// diagonal check
			flag = true;
			i = index[0] + 1;
			j = index[1] + 1;
			for(int k=1; i<matrix.length && j<matrix.length; i++,j++,k++)
			{
				if(str.charAt(k)!=matrix[i][j])
				{
					flag = false;
					break;
				}
			}

			if(flag == true)
			{
				System.out.println("Found in Diagonal");
				return;
			}
		}
	}
}

- nahidcse05 June 05, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

vdvdvdvdvdv

- sdgvsdv July 01, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

dvdvdvdv

- sdgvsdv July 01, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

{cant we use rabin karp since the pattern after that we can just look for the hash value along row and column and diagnol so to reduce the no of comparison
}

- Ayoush Chourasia July 09, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

/*
*
* You are given an N*N matrix. The matrix contains characters.
* Write a program to find a word in the matrix.
* The word can be found in either the rows or columns or the diagonals.
* The program should return true if the word is found and false if the word is not found.
*/

package CareerCup;

public class Check_Word_in_Matrix {

private static Character[][] matrix={{'a','d','i','t','y','a'}, {'n','i','k','h','i','l'},
{'s','u','b','o','d','h'},{'k','a','m','s','u','k'},{'r','a','g','h','u','g'},{'g','h','i','m','a','n'}
};

public static void main(String[] args) {


String word="raghug";
System.out.println("Word found is : " + isWordFound(word));

}

private static boolean isWordFound(String input) {

if(input==null)
return false;

if(input.length() > matrix.length)
return false;

Character x=input.charAt(0);

for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix.length;j++)
{
if(matrix[i][j]==x) //If match is found for first character
{
if(checkRightDiagonal(input,i,j) || checkLeftDiagonal(input,i,j) || checkRight(input,i,j) || checkDown(input,i,j) )
{
return true;
}
}
}
}

return false;
}

private static boolean checkRightDiagonal(String input, int row, int column) {

/*
* If the length is greater than the input, there is no match, simply return false
*/

if( row+input.length() > matrix.length || column +input.length() > matrix.length )
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRightDiagonal" );
return true;
}

private static boolean checkLeftDiagonal(String input, int row, int column) {

if(column < input.length()-1)
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][--column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkLeftDiagonal" );
return true;
}

private static boolean checkDown(String input, int row, int column) {

if(column + input.length() > matrix.length )
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkDown" );
return true;
}

private static boolean checkRight(String input, int row, int column) {

if(column +input.length() > matrix.length)
return false;


int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRight" );
return true;
}
}

- Subodh August 02, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

/*
*
* You are given an N*N matrix. The matrix contains characters.
* Write a program to find a word in the matrix.
* The word can be found in either the rows or columns or the diagonals.
* The program should return true if the word is found and false if the word is not found.
*/

package CareerCup;

public class Check_Word_in_Matrix {

private static Character[][] matrix={{'a','d','i','t','y','a'}, {'n','i','k','h','i','l'},
{'s','u','b','o','d','h'},{'k','a','m','s','u','k'},{'r','a','g','h','u','g'},{'g','h','i','m','a','n'}
};

public static void main(String[] args) {


String word="raghug";
System.out.println("Word found is : " + isWordFound(word));

}

private static boolean isWordFound(String input) {

if(input==null)
return false;

if(input.length() > matrix.length)
return false;

Character x=input.charAt(0);

for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix.length;j++)
{
if(matrix[i][j]==x) //If match is found for first character
{
if(checkRightDiagonal(input,i,j) || checkLeftDiagonal(input,i,j) || checkRight(input,i,j) || checkDown(input,i,j) )
{
return true;
}
}
}
}

return false;
}

private static boolean checkRightDiagonal(String input, int row, int column) {

/*
* If the length is greater than the input, there is no match, simply return false
*/

if( row+input.length() > matrix.length || column +input.length() > matrix.length )
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRightDiagonal" );
return true;
}

private static boolean checkLeftDiagonal(String input, int row, int column) {

if(column < input.length()-1)
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][--column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkLeftDiagonal" );
return true;
}

private static boolean checkDown(String input, int row, int column) {

if(column + input.length() > matrix.length )
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkDown" );
return true;
}

private static boolean checkRight(String input, int row, int column) {

if(column +input.length() > matrix.length)
return false;


int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRight" );
return true;
}
}

- Subodh August 02, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

{
public class Check_Word_in_Matrix {

private static Character[][] matrix={{'a','d','i','t','y','a'}, {'n','i','k','h','i','l'},
{'s','u','b','o','d','h'},{'k','a','m','s','u','k'},{'r','a','g','h','u','g'},{'g','h','i','m','a','n'}
};

public static void main(String[] args) {

String word="raghug";
System.out.println("Word found is : " + isWordFound(word));
}

private static boolean isWordFound(String input) {

if(input==null)
return false;

if(input.length() > matrix.length)
return false;

Character x=input.charAt(0);
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix.length;j++)
{
if(matrix[i][j]==x) //If match is found for first character
{
if(checkRightDiagonal(input,i,j) || checkLeftDiagonal(input,i,j) || checkRight(input,i,j) || checkDown(input,i,j) )
{
return true;
}
}
}
}

return false;
}

private static boolean checkRightDiagonal(String input, int row, int column) {

/*
* If the length is greater than the input, there is no match, simply return false
*/

if( row+input.length() > matrix.length || column +input.length() > matrix.length )
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRightDiagonal" );
return true;
}

private static boolean checkLeftDiagonal(String input, int row, int column) {

if(column < input.length()-1)
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[++row][--column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkLeftDiagonal" );
return true;
}

private static boolean checkDown(String input, int row, int column) {

if(column + input.length() > matrix.length )
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[++row][column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkDown" );
return true;
}

private static boolean checkRight(String input, int row, int column) {

if(column +input.length() > matrix.length)
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRight" );
return true;
}
}
}

- Subodh August 02, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

{
public class Check_Word_in_Matrix {

private static Character[][] matrix={{'a','d','i','t','y','a'}, {'n','i','k','h','i','l'},
{'s','u','b','o','d','h'},{'k','a','m','s','u','k'},{'r','a','g','h','u','g'},{'g','h','i','m','a','n'}
};

public static void main(String[] args) {

String word="raghug";
System.out.println("Word found is : " + isWordFound(word));
}

private static boolean isWordFound(String input) {

if(input==null)
return false;

if(input.length() > matrix.length)
return false;

Character x=input.charAt(0);
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix.length;j++)
{
if(matrix[i][j]==x) //If match is found for first character
{
if(checkRightDiagonal(input,i,j) || checkLeftDiagonal(input,i,j) || checkRight(input,i,j) || checkDown(input,i,j) )
{
return true;
}
}
}
}

return false;
}

private static boolean checkRightDiagonal(String input, int row, int column) {

/*
* If the length is greater than the input, there is no match, simply return false
*/

if( row+input.length() > matrix.length || column +input.length() > matrix.length )
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{

if(matrix[++row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRightDiagonal" );
return true;
}

private static boolean checkLeftDiagonal(String input, int row, int column) {

if(column < input.length()-1)
{
return false;
}

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[++row][--column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkLeftDiagonal" );
return true;
}

private static boolean checkDown(String input, int row, int column) {

if(column + input.length() > matrix.length )
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[++row][column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkDown" );
return true;
}

private static boolean checkRight(String input, int row, int column) {

if(column +input.length() > matrix.length)
return false;

int count=input.length()-1;
int charcount=1;

while(count!=0)
{
if(matrix[row][++column]==input.charAt(charcount)) //If match is found for first character
{
count--;
charcount++;
}
else
{
return false;
}
}

System.out.println("Word found in method : checkRight" );
return true;
}
}
}

- Subodh August 02, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

public class findWordIn2Darray {
	
	
	public static void main(String Args[]){
		
		char[][] matrix = {{'a','b','c'},{'d','e', 'f'}, {'g','h','i'}};

		
		boolean f =  findWord(matrix,"aei");
		
		System.out.println(f);
		
	}
	public static boolean findWord(char[][] matrix, String word) {
		char[] chars = word.toCharArray();

        int rowLen = matrix.length;
        int colLen = matrix[0].length;

        if (word.length() > rowLen || word.length() > colLen) {
            return false;
        }

        int charPoint = 0;
        
        //Scan rows
        for(int i = 0; i < rowLen; i++){
        	for(int j = 0; j < colLen; j++){
        		System.out.println(matrix[i][j]);
        		if(matrix[i][j] != chars[charPoint]){
        			charPoint = 0;
        			continue;
        		} else {
        			if(chars[charPoint] == chars[word.length()-1]){
        				return true;
        			}
        			charPoint++;
        		}
        	}
        }
        
        //Scan columns; 
        for(int j = 0; j < colLen; j++){
        	for(int i = 0; i < rowLen; i++){
        		System.out.println(matrix[i][j]);
        		if(matrix[i][j] != chars[charPoint]){
        			charPoint = 0;
        			continue;
        		} else {
        			if(chars[charPoint] == chars[word.length()-1]){
        				return true;
        			}
        			charPoint++;
        		}  		
        	} 	
        }
        
        
        //Scan Diagonal(Top left to bottom right)
        for(int i = 0; i  < rowLen; i++){
        	System.out.println(matrix[i][i]);
        		if(matrix[i][i] != chars[charPoint]){
        			charPoint = 0;
        			continue;
        		} else {
        			if(chars[charPoint] == chars[word.length()-1]){
        				return true;
        			}
        			charPoint++;
        		} 
        }
        
        //Scan Diagonal(Top Right to bottom left)
        for(int i = rowLen - 1; i >= 0; i--){
        	System.out.println(matrix[i][i]);
        		if(matrix[i][i] != chars[charPoint]){
        			charPoint = 0;
        			continue;
        		} else {
        			if(chars[charPoint] == chars[word.length()-1]){
        				return true;
        			}
        			charPoint++;
        		} 
        	
        }
       
		return false;
	}

}

- adubashi November 09, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

My C# solution

Console.WriteLine("Enter the no. of rows");
      	int r = Convert.ToInt32(Console.ReadLine());
      	Console.WriteLine("Enter the no. of columns");
      	int c = Convert.ToInt32(Console.ReadLine());
      	string[,] a = new string[r,c];
      	for(int i=0; i<r; i++)
        {
          for(int j=0; j<c; j++)
          {
            a[i,j] = Console.ReadLine();
          }
        }
      	Console.WriteLine("The characters of matrix is");
      	for(int i=0; i<r; i++)
        {
          for(int j=0; j<c; j++)
          {
            Console.Write("{0} ",a[i,j]);
          }
          Console.WriteLine();
        }
      	Console.WriteLine("Enter a word");
      	string s = Console.ReadLine();
     	int m=0,flag=0;
      	for(int k=0; k<s.Length; k++)
       	{
      	for(int i=0; i<r; i++)
        {
          for(int j=0; j<c; j++)
          {       
              char[] ch = a[i,j].ToCharArray();
              if(s[k]==ch[m])
              {
                flag = 1;
                break;
              }
              else
                flag = 0;
          }
          if(flag==1)
            break;
        }
        }
      if(flag==1)
        Console.WriteLine("True");
      else
        Console.WriteLine("False");

- jeyaseelan November 22, 2016 | Flag Reply


Add a Comment
Name:

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.

Books

is a comprehensive book on getting a job at a top tech company, while focuses on dev interviews and does this for PMs.

Learn More

Videos

CareerCup's interview videos give you a real-life look at technical interviews. In these unscripted videos, watch how other candidates handle tough questions and how the interviewer thinks about their performance.

Learn More

Resume Review

Most engineers make critical mistakes on their resumes -- we can fix your resume with our custom resume review service. And, we use fellow engineers as our resume reviewers, so you can be sure that we "get" what you're saying.

Learn More

Mock Interviews

Our Mock Interviews will be conducted "in character" just like a real interview, and can focus on whatever topics you want. All our interviewers have worked for Microsoft, Google or Amazon, you know you'll get a true-to-life experience.

Learn More