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

2014 华为机考 中国海洋大学上午第三题(java实现)

2013-10-12 15:56 309 查看
昨天上午,在还算轻松地情况下完成了机考,虽然最后一题做了一个多小时都没做出来,但是庆幸后面的行为模式测试过关了,真是刷人的测试啊。

回来后把第三题再想想,重新做了一遍,结果不到20分钟就做出来了(我觉得做出来了,几次错误、正确测试都还行,但正确与否还需验证)。明天要面试,不知道结果怎样,但是不管怎样,尽力就好,像半泽直树那样拼搏的人生才有意义啊~~!!

题目,记得个大概。就是有字符串“?^_^*”,"?"与“*”中间字符为主要匹配字符,“?”代表一个字符,而“*”可以当做0或任意数量字符。对目标字符串进行匹配,并输出字符串匹配成功的第一个字符的下标,字符串的第一个字符下标为0。(我一开始没注意到“?”可以有N多个,白浪费功夫做一个“?”的匹配了)。

例子:

输入:?^_^*

abc^_^abc

输出:2

俺自己的代码:

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

static int num=0;

public static void main(String[] args) {

Scanner cin = new Scanner(new BufferedInputStream(System.in));
String s1 = cin.next();
String s2 = cin.next();
int flag=0,k=0,t=-1;

char[] ch = s2.toCharArray();
List<Character> list = get(s1);

for(int i=num-1;i<ch.length;i++){

if(flag==0){

if(ch[i]==list.get(k)){
flag=1;
k++;
t=i-num;
}

}else{
if(ch[i]==list.get(k)){
k++;

if(k==list.size())
break;
}else{
flag=0;
k=0;
t=-1;
}
}

}

if(k<list.size())
t=-1;

if(t>=0)
System.out.print(t);
else
System.out.print(t);

}

public static List<Character> get(String s){

List<Character> list = new ArrayList<Character>();

char[] ch = s.toCharArray();

for(char c:ch){

if(c=='?')
num++;
else if(c!='*')
list.add(c);
else
break;
}

return list;
}

}


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