[Java]伯俊9935号[文字列爆発]Java
白駿9935号です.
https://www.acmicpc.net/problem/9935
質問する
文字列に爆発文字列が含まれている場合、すべての爆発文字列が爆発します.残りの文字列を順番に接続し、新しい文字列を形成します. 新しく生成された文字列には、爆発文字列が含まれる場合があります. の爆発は、爆発文字列が文字列に含まれないまで続く. 尚根は爆発が終わった後に残った文字列をすべて求めてみた.時々残った文字がない.「FRULA」が出力されます.
爆発文字列には、2つ以上の同じ文字は含まれません.
入力
コード#コード#
https://www.acmicpc.net/problem/9935
質問する
尚根は文字列に爆発文字列を埋め込んだ.文字列が爆発すると、文字列から消え、残りの文字列が結合されます.
爆発は次の手順で行われます.
爆発文字列には、2つ以上の同じ文字は含まれません.
入力
最初の行には文字列があります.文字列の長さは1以上で、1000000以下です.
2行目は爆発文字列を示します.長さは1以上36未満です.
どちらの文字列も小文字と大文字、数字0,1,...、9だけで構成されています.
しゅつりょく
最初の行は、爆発が終了した後に残ったすべての文字列を出力します.
入力例 mirkovC4nizCC44
C4
12ab112ab2ab
12ab
サンプル出力 mirkovniz
FRULA
考える
最初は、文字列を1つずつ巡回しながら、すべての爆発文字列を削除する方法を選択しました.問題はタイムアウトです.
タイムアウトは問題で、解決のためにいろいろ努力しましたが、結局失敗して、他の人のコードを参考に解読しました.
この問題はstackを用いて解決する必要がある.
アクション
最初の行は、爆発が終了した後に残ったすべての文字列を出力します.
入力例 mirkovC4nizCC44
C4
12ab112ab2ab
12ab
サンプル出力 mirkovniz
FRULA
考える
最初は、文字列を1つずつ巡回しながら、すべての爆発文字列を削除する方法を選択しました.問題はタイムアウトです.
タイムアウトは問題で、解決のためにいろいろ努力しましたが、結局失敗して、他の人のコードを参考に解読しました.
この問題はstackを用いて解決する必要がある.
アクション
mirkovC4nizCC44
C4
12ab112ab2ab
12ab
mirkovniz
FRULA
考える
最初は、文字列を1つずつ巡回しながら、すべての爆発文字列を削除する方法を選択しました.問題はタイムアウトです.
タイムアウトは問題で、解決のためにいろいろ努力しましたが、結局失敗して、他の人のコードを参考に解読しました.
この問題はstackを用いて解決する必要がある.
アクション
String str = br.readLine();
String bomb = br.readLine();
int str_len = str.length();
int bomb_len = bomb.length();
タイムアウトはよく使われる方法で、長さの計算は事前に変数に設定しておきます.できるだけ時間を節約する. Stack<Character> stack = new Stack<>();
for(int i=0; i<str_len; i++) {
int count = 0;
stack.push(str.charAt(i));
// 스택의 크기가 폭탄 문자열의 길이와 같아지면 탐색 시작
if(stack.size() >= bomb_len) {
for(int j=0; j<bomb_len; j++) {
if(stack.get(stack.size() - bomb_len + j) == bomb.charAt(j)) {
count++;
}
if(count == bomb_len) {
for(int k=0; k<bomb_len; k++) {
stack.pop();
}
}
}
}
}
スタックのデータ構造を使用して、スタックのサイズがbomb
より大きい場合は、bomb
文字列と同じようにスタック内のデータを繰り返しチェックします.popを実行します.コード#コード# import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
String bomb = br.readLine();
int str_len = str.length();
int bomb_len = bomb.length();
Stack<Character> stack = new Stack<>();
for(int i=0; i<str_len; i++) {
int count = 0;
stack.push(str.charAt(i));
// 스택의 크기가 폭탄 문자열의 길이와 같아지면 탐색 시작
if(stack.size() >= bomb_len) {
for(int j=0; j<bomb_len; j++) {
if(stack.get(stack.size() - bomb_len + j) == bomb.charAt(j)) {
count++;
}
if(count == bomb_len) {
for(int k=0; k<bomb_len; k++) {
stack.pop();
}
}
}
}
}
if(stack.isEmpty()) {
System.out.println("FRULA");
}
else {
for(char ch : stack) {
sb.append(ch);
}
}
System.out.println(sb);
} // End of main
} // End of class
Reference
この問題について([Java]伯俊9935号[文字列爆発]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-9935번-문자열-폭발-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
String bomb = br.readLine();
int str_len = str.length();
int bomb_len = bomb.length();
Stack<Character> stack = new Stack<>();
for(int i=0; i<str_len; i++) {
int count = 0;
stack.push(str.charAt(i));
// 스택의 크기가 폭탄 문자열의 길이와 같아지면 탐색 시작
if(stack.size() >= bomb_len) {
for(int j=0; j<bomb_len; j++) {
if(stack.get(stack.size() - bomb_len + j) == bomb.charAt(j)) {
count++;
}
if(count == bomb_len) {
for(int k=0; k<bomb_len; k++) {
stack.pop();
}
}
}
}
}
if(stack.isEmpty()) {
System.out.println("FRULA");
}
else {
for(char ch : stack) {
sb.append(ch);
}
}
System.out.println(sb);
} // End of main
} // End of class
Reference
この問題について([Java]伯俊9935号[文字列爆発]Java), 我々は、より多くの情報をここで見つけました https://velog.io/@lifeisbeautiful/Java-백준-9935번-문자열-폭발-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol