您的位置:首页 > 编程语言

2017阿里巴巴实习生招聘编程题

2017-04-27 11:11 309 查看


解答:

   此题是动态规划类问题,假设dp[i][j]表示为为 s[0..i]与p[0...j]是否匹配,则代码如下:

       import java.util.Scanner;

/**
* 字符串匹配
* @author Dell
*
*/
public class Test4 {

public static boolean isMatch(String s, String p)
{
if(p.length()==0)
{
if(s.length()==0) return true;
else
return false;
}

boolean[][] dp=new boolean[s.length()+1][p.length()+1];
dp[0][0]=true;
for(int i=1;i<=p.length();i++)
{
if(p.charAt(i-1)=='*')
dp[0][i]=dp[0][i-1];

}
for(int i=1;i<=s.length();i++)
{
for(int j=1;j<=p.length();j++)
{
if(s.charAt(i-1)==p.charAt(j-1)||p.charAt(j-1)=='?')
dp[i][j]=dp[i-1][j-1];
if(p.charAt(j-1)=='*')
dp[i][j]=dp[i-1][j]||dp[i][j-1]; //比较难想

}

}

return dp[s.length()][p.length()];

}

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){

String s=sc.nextLine();
String p=sc.nextLine();

System.out.println(isMatch(s,p));
}
}

}

2:类似于逆波兰表达式的题,只是附加了一些条件,比如栈的空间最大为16,当压栈的整数超过16,则返回-2;当栈为空时再从栈中弹出数据要返回-1;此外,逆波兰表达式中的空格表示分隔符,可以有多个空格。

解答:

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class Test2 {

public static int resolve(String expr)
{
Stack<Integer> s=new Stack<>();
String[] s1=expr.split(" ");
ArrayList<String> list=new ArrayList<>();

for(int i=0;i<s1.length;i++)
{
if(s1[i]!=" ")
{
list.add(s1[i]);
}

}

for(int i=0;i<list.size();i++)
{
String t=list.get(i);
try {
int temp=Integer.parseInt(t);
if(s.size()<16)
{
s.push(temp);
}
else
{
return -2;
}

} catch (NumberFormatException e) {

if(t.equals("^"))
{
if(s.size()>=1)
{
int a=s.pop();
a++;
s.push(a);
}
else
return -1;

}
else if(t.equals("+"))
{
if(s.size()>=2)
{
int a=s.pop();
int b=s.pop();
int c=a+b;
s.push(c);
}
else
{
return -1;

}

}
else
{
if(s.size()>=2)
{
int a=s.pop();
int b=s.pop();
int c=a*b;
s.push(c);
}
else
{
return -1;

}

}

}

}
return s.pop();
}

public static void main(String[] args) {
ArrayList<Integer> inputs=new ArrayList<Integer>();
Scanner in=new Scanner(System.in);
String line=in.nextLine();
if(line!=null&&!line.isEmpty())
{
int res=resolve(line.trim());
System.out.println(String.valueOf(res));
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息