题解 | #字符串匹配# Java实现

字符串匹配

https://www.nowcoder.com/practice/fbdc522ef958455687654b38a4ca01e0

import java.util.Scanner; 


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            in.nextLine();
            String[] strings = new String[n];
            for(int i = 0;i < n;i++){
                strings[i] = in.nextLine();
            }
            String targetString = in.nextLine();
            func(strings,targetString);
        }
    }

    public static void func(String[] strings,String targetString){
        // System.out.println("targetString = "+targetString);
        String ts = targetString.toLowerCase();
        
        for(int i = 0;i < strings.length;i++){
            String s = strings[i].toLowerCase();
            int index = 0,pos = 0;

            while(index < s.length() && pos < ts.length()){
                // 匹配的话,同时往前加一
                if(ts.charAt(pos) == s.charAt(index)){
                    pos++;
                    index++;
                }
                else if(ts.charAt(pos) == '['){
                    int tIndex = ts.indexOf(']',pos);
                    for(int j = pos;j < tIndex;j++){
                        if(ts.charAt(j) == s.charAt(index)){
                            index++;
                            // 当在[]内找到匹配的字符时,pos移动到]的下一位
                            // 在这里卡了半天,o(╥﹏╥)o
                            pos = tIndex+1;
                            break;
                        }else{
                            pos = j;
                        }
                    }
                }
                else{
                    break;
                }

                if(index == s.length() && pos == ts.length()){
                    System.out.printf("%d %s\n",(i+1),strings[i]);
                }
            }
        }

    }


}

全部评论

相关推荐

想润的芹菜人狠话不多:把其中一个老总放中间都会得罪另一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务