2014 华为机考 中国海洋大学上午第三题(java实现)
昨天上午,在还算轻松地情况下完成了机考,虽然最后一题做了一个多小时都没做出来,但是庆幸后面的行为模式测试过关了,真是刷人的测试啊。
回来后把第三题再想想,重新做了一遍,结果不到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; } }