面接通り問題文字列類似性をしました。最初はPythonでこれを行いました。これにより、最後の5つのテストケースでTimeLimitExceededエラーが発生しました。それから私はJavaで同じものを試し、解決策が受け入れられました。最後の5つのテストケースのJavaバージョンとPythonバージョンの時間差は非常に大きかったが、最初の5つのテストケースではPythonがJavaを上回っていた。どうしてこんなことに?
文字列の長さは100000まで可能です。
stringsim.py
N=int(raw_input())
while N!=0:
rootstr=[i for i in raw_input()]
solution=0
for i in xrange(len(rootstr)):
for j in xrange(i,len(rootstr)):
if(rootstr[j-i]==rootstr[j]):solution+=1
else:break
print solution
N-=1
Solution.java:
class Solution{
public static void main(String[] args) {
java.util.Scanner sc=new java.util.Scanner(System.in);
int N=sc.nextInt(),sol;
while(N--!=0){
sol=0;
char[] s=sc.next().toCharArray();
for(int i=0;i<s.length;i++){
for(int j=i;j<s.length;j++){
if(s[j]==s[j-i]) sol++;
else break;
}
}
System.out.println(sol);
}
}
}
Javaの実行時間: 1成功0.172387 2成功0.172177 3成功0.172185 4成功0.172178 5成功0.263904 6成功2.82661 7成功4.66869 8成功4.83201 9成功1.36585 10成功1.02123 Pythonの場合: 1成功0.081229 2成功0.081047 3成功0.081032 4成功0.081015 5成功0.910672 6制限時間を超えました。16.1818 7制限時間を超えました。16.2357 8制限時間を超えました。16.2001 9制限時間を超えました。16.2408 10制限時間を超えました。16.1831