9月23日参加去哪儿笔试题目了,我投的是研发岗位,笔试题目是三道程序设计题目。
参加笔试的时候用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();
}
}