難しすぎる。
300
解法:Greedyとか怖すぎなのでDPした。
import java.util.*; public class TheLargestString{ public String find(String a,String b){ int n=a.length(); String[][]dp=new String[n+1][n+1]; for(int i=0;i<=n;i++) for(int j=0;j<=n;j++)dp[i][j]=""; dp[0][0]=""; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ if(dp[i][j].compareTo(dp[i+1][j])>0)dp[i+1][j]=dp[i][j]; String s=dp[i][j].substring(0,j)+a.charAt(i)+dp[i][j].substring(j)+b.charAt(i); if(s.compareTo(dp[i+1][j+1])>0)dp[i+1][j+1]=s; } } String ret=""; for(int i=0;i<=n;i++)if(ret.compareTo(dp[n][i])<0)ret=dp[n][i]; return ret; } }
他:知らない
Systest:通った(167th)
Rating
2018 -> 2081 (-37)
上がり幅が最近どんどん小さくなっている…