zoukankan      html  css  js  c++  java
  • 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

       

  • 相关阅读:
    需要我们了解的SQL Server阻塞原因与解决方法
    SQL Server应用模式之OLTP系统性能分析
    第一章 scala环境搭建
    IO
    装饰器模式
    java 泛型方法
    文件格式转换
    spring ioc
    深入浅出Java模式设计之模板方法模式
    struts2
  • 原文地址:https://www.cnblogs.com/sasaxu/p/3365412.html
Copyright © 2011-2022 走看看