今天刚刚面了Google的SWE实习生,面试官人很好。也没有自我介绍和介绍项目的环节,上来就刚算法了。
题目:
有两个字符串str1和str2,两个字符串中可能出现'a'-'z',‘*’,‘?’字符。其中?可以匹配任意字符。*可以匹配任意字符串,包括空串。提问两个字符串能否匹配。我用了特别复杂的迭代。但是应该可以用动态规划
Q1. s1, s2
a-z?* a:a, ?:a, *:, *:a, *:abc
public boolean s(String str1,String str2){
if(str1.equals(“”)&&str2.equals(“”)||str1==null&&str2==null){
return true;
}
else{
int pre_i=0;
int pre_j=0;
for(int j=0,i=0;j<str2.length()&&i<str1.length();){
if(str1.charAt(i)==’?’||str2.charAt(i)==’?’||str1.charAt(i)
==str2.charAt(i)){
i++;
j++;
continue;
}
if(str1.charAt(i)==’*’){
for(int k=j;k<=str2.length();k++){
if(i+1==str1.length()) {
if(s(“”,str2.substring(k,str2.length()){return true;}
}else if(s(str1.substring(i+1,str1.length()),str2.substring(k,str2.length()){return true;}else return false;
}
}
if(str2.charAt(j)==’*’){
for(int k=i;k<=str1.length();k++){
if(i+1==str1.length()) {
if(s(“”,str2.substring(k,str2.length()){return true;}
}else if(s(str1.substring(i+1,str1.length()),str2.substring(k,str2.length()){return true;}else return false;
}
}
}
if(i==str1.length()){return true;}
else return false;
}
}
Length O(n), * O(m)
Time complexity
O(n^m) -> (n * n)
最后迭代复杂度也没有算出来,凉。。。