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;
    }

}
View Code

 

 

   

posted @ 2013-10-12 15:56  逢尘化雪  阅读(540)  评论(2编辑  收藏  举报