2015去哪儿校招杭州站软件研发笔试题

进修社 人气:4.39K

9月23日参加去哪儿笔试题目了,我投的是研发岗位,笔试题目是三道程序设计题目。

2015去哪儿校招杭州站软件研发笔试题

参加笔试的时候用c写的,处理字符串很麻烦。由于时间关系,第三题逻辑有点不清粗。回来之后,我就把题目又用java写了一遍。现在对第三题仍然不能够完全解答出来。

1,String padString(String string,int minLength,char padChar);

就是在string前用padChar把string填充到至少minLength长度

如("7",3'0'),得到的结果是"007";

如("2012",3,'0'),的到的结果是"2012”;

minLength可能是负数

public class padString {

public static void main(String[] args) {

// TODO Auto-generated method stub

}

String padString(String string,int minLength,char padChar){

if(minLength

{

return string;

}

StringBuilder sb = new StringBuilder();

int pads = minLength - th();

for(int i=0;i

{

nd(padChar);

}

nd(string);

return ring();

}

}

2,命令解析

对于命令

-name jack -age 20 -address "HangZhou ZheDa Road"

要变成[-name jack, -age 20, -address "HangZhou ZheDa Road"]

命令由参数和值对组成,参数以-开头,参数和值之间,值和值之间都是用空格隔开,双引号“ ”之间的值当做一个整体

来处理。所有参数和值只包括英文字母,数字,减号和双引号

public class CommandParser {

public static void main(String[] args) {

CommandParser cp = new CommandParser();

String res = null;

res = eCommand("-name jack -age 20 -address "HangZhou ZheDa Road"");

tln(res);

res = eCommand(" -name jack -age 20 -address "HangZhou ZheDa Road"");

tln(res);

res = eCommand("-name jack -age 20 -address "HangZhou ZheDa Road"");

tln(res);

res = eCommand("-name jack -age 20 -address "HangZhou ZheDa Road " ");

tln(res);

}

String parseCommand(String com)

{

//分解成多个参数-值对

String pars[] = t("-");

StringBuilder sb = new StringBuilder();

nd("[-");

String words[]=null;

//循环抽取其中的命令和值

for(int i=0;i

{

String tmp = ();

//判断这个值是否是非空格

if(tmp!=null&&th()>0)

{

int j = xOf(' ');

int k = j;

nd(tring(0,j));

nd(' ');

//找到下一个空格的地方

while(k

{

k++;

}

nd(tring(k));

if(i!=th-1)

{

nd(',');

}else

{

nd(']');

}

}

}

return ring();

}

}

3,dif(String str1,String str2);

输出两个字符串中不同的的'字符,如果字符a在str1中出现,而没有在str2当中出现,则输出-a.相反,则输出+a;

字符串当中重复的子字符串不输出。

abcde,bcde 输出-a

dabc, aabcef 输出+a,-d,+e,+f

如 abcdefe,aabcadef输出+a,+a,-e;

public class StringDifferent {

public static void main(String[] args) {

StringDifferent sd = new StringDifferent();

String res = null;

res = if("abcde", "bcde");

tln(res);

res = if("dabc", "aabcef");

tln(res);

res = if("abcdefg", "abcdefg");

tln(res);

res = if("abfg", "abcdefg");

tln(res);

res = if("afsdlf", "sdlfajsdlfjsd");

tln(res);

}

//这道题目相当于最长公共子序列的改进版,字符串进行二维存储了之后,就沿着相应的规则下来

//这样做不知道对不对,只能这样写了

String strDif(String str1, String str2) {

StringBuilder sb = new StringBuilder();

String tmp = null;

// if(th()>th())

// {

// tmp = str1;

// str1 = str2;

// str2 = tmp;

// }

int dp[][] = new int[th()+1][th()+1];

int len1 = th();

int len2 = th();

//进行dp的方法

for(int i=1;i<=len1;i++)

{

for(int j=1;j<=len2;j++)

{

if(At(i-1)==At(j-1))

{

dp[j] = dp[i-1][j-1]+1;

}

}

}

// for(int i=0;i<=len1;i++)

// {

// for(int j=0;j<=len2;j++)

// {

// t(dp[j]+",");

// }

// tln();

// }

int i = len1,j = len2;

//如何获取其中的字符串

while(i>=0 && j>=0)

{

if(dp[j]==0)

{

if(i

{

tmp = "+"+At(j-1);

rt(0, tmp);

j--;

}else

{

//判断到头的情况

if(i==j && j==0)

{

break;

}

tmp = "-"+At(i-1);

rt(0, tmp);

i--;

}

}else{

i--;

j--;

}

}

return ring();

}

}