Yahoo Interview Question
Software Engineer / DevelopersCountry: United States
Interview Type: In-Person
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternMatch {
public static void main(String[] args) {
Pattern p = Pattern.compile("a-z + *");
Matcher m = p.matcher("a-z");
Boolean b = m.matches();
if(b)
System.out.println("matches");
else
System.out.println("does not match");
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternMatch {
public static void main(String[] args) {
Pattern p = Pattern.compile("a-z + *");
Matcher m = p.matcher("a-z");
Boolean b = m.matches();
if(b)
System.out.println("matches");
else
System.out.println("does not match");
}
}
Here is my java code:
private boolean isMatch( String s, String regex)
{
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
boolean b=m.find();
return b;
}
following may be updated to meet ur requirements..
public class PatternMatcher {
public static void main(String[] args) {
String str = "This is a sample string";
String pattern = "Th*is +";
System.out.println(isMatchFound(str,pattern));
pattern = "a*This";
System.out.println(isMatchFound(str,pattern));
pattern = "*This"; //valid pattern
System.out.println(isMatchFound(str,pattern));
pattern = "+This"; //invalid pattern
System.out.println(isMatchFound(str,pattern));
}
public static boolean isMatchFound(String str, String pattern){
return isMatchFound(str, pattern, 0, 0);
}
private static boolean isMatchFound(String str, String pattern, int strInd, int patInd){
if(strInd < str.length()){
if(patInd==pattern.length()){
return true;
} else {
if(pattern.charAt(patInd)=='*'){
int i=patInd-1;
for(;i>=0;i--)
if(pattern.charAt(i)!='*' && pattern.charAt(i)!='+')
break;
if(i<0){
//return false;
return isMatchFound(str, pattern, strInd, patInd+1);
} else if(pattern.charAt(i)==str.charAt(strInd)){
return isMatchFound(str, pattern, strInd+1, patInd);
} else {
return isMatchFound(str, pattern, strInd, patInd+1); //match may have been found before, don't worry if its not found as well
}
} else if (pattern.charAt(patInd)=='+') {
int i=patInd-1;
for(;i>=0;i--)
if(pattern.charAt(i)!='*' && pattern.charAt(i)!='+')
break;
if(i<0){
return false;
//return isMatchFound(str, pattern, strInd, patInd+1);
}else if(pattern.charAt(i)==str.charAt(strInd)){
return isMatchFound(str, pattern, strInd+1, patInd);
} else if(pattern.charAt(i)==str.charAt(strInd-1)){
return isMatchFound(str, pattern, strInd, patInd+1); //cur str char still needs to match so not doing strInd+1
} else {
return isMatchFound(str, pattern, strInd, 0); //match not found, start pattern from 0
}
} else { //current pattern char not + nor *
if(pattern.charAt(patInd)==str.charAt(strInd)){
return isMatchFound(str, pattern, strInd+1, patInd+1);
} else {
if(patInd+1<pattern.length() && pattern.charAt(patInd+1)=='*'){
return isMatchFound(str, pattern, strInd, patInd+1); //match not found
} else {
return isMatchFound(str, pattern, strInd+1, 0); //match not found
}
}
}
}
} else {
if(patInd<pattern.length())
return false;
else
return true;
}
}
}
- mrsurajpoudel.wordpress.com November 16, 2014