백준 16916 - 부분 문자열

Updated:

Java

16916 번 - 부분 문자열

문제

접근 방법

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	char[] text = br.readLine().toCharArray();
    	char[] pattern = br.readLine().toCharArray();
    	int nLen = text.length;
    	int len = pattern.length;
    	int[] pi = new int[len];

    	int j = 0;
    	for(int i = 1; i < len; i++) {
    		while(j > 0 && pattern[i] != pattern[j]) {
    			j = pi[j - 1];
    		}
    		if(pattern[i] == pattern[j]) {
    			pi[i] = ++j;
    		}
    	}
    	j = 0;
    	boolean flag = false;
    	for(int i = 0; i < nLen; i++) {
    		while(j > 0 && text[i] != pattern[j]) {
    			j = pi[j - 1];
    		}
    		if(text[i] == pattern[j]) {
    			if(j == len - 1) {
    				flag = true;
    				break;
    			}
    			j++;
    		}
    	}

    	if(flag)
    		System.out.println(1);
    	else
    		System.out.println(0);

    	br.close();
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점