masarumasuのブログ

現役文系大学生プログラマー。使用言語はJavaとRuby。意識高いことから低いことまでいろいろ書きます。

Paiza POH8 水着問題解説(Ruby)

masarumasuです。

今回はPaiza POH8 水着問題の解説をしようと思います。使用言語はRubyです。

問題の詳細は下記リンクを参照してください。

 

paiza.jp

このコードが私の回答コードです。

n,m=gets.chomp.split.map(&:to_i)
s=gets.chomp.split("")
t=gets.chomp
i=0
while i<n
t=t.sub(s[i],"")
i+=1
end
puts t.size

 

変更前の文字列と重複する文字を消して、残った要素の長さを出力するといった形です。 

次はJavaで実装してみました。

import java.util.*;

public class Main {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
String A
=a.split(" ");
int N=Integer.parseInt(A[0]);
int M=Integer.parseInt(A[1]);
String s= sc.nextLine();
String S[]=s.split("");
String t= sc.nextLine();
int i=0;
while(i<N){
t=t.replaceFirst(S[i],"");
i++;}
System.out.println(t.length());
}
}

これで正解になるはずだが、最後のテストケースが通らないです。おそらく、timelineexccedです。より高速なアルゴリズムを書く必要があるが現時点で見つけることが出来ません。分かる方いたら教えてください。