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

来源:互联网 发布:供销大数据 陈静红 编辑:程序博客网 时间:2024/05/22 06:28

解答:

   此题是动态规划类问题,假设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;elsereturn 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);}elsereturn -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));  }}}




2 0
原创粉丝点击