Java での文字列操作のコーディングの問題を解決しようとしています。問題は、
数字と小文字で構成される 2 つの文字列 S と T が与えられた場合、どちらの文字列からも 1 つの数字だけを削除することができます。S を T よりも辞書的に小さくするには、削除する方法がいくつあるかを数えます。
私は自分でこのテストケースを思いつきました。s = '3ab' および t = 'cd' の場合、1 を返します。s = '123ab' および t = '423cd' の場合、6 を返します。
私の考えは、2つのforループを使用し、文字が数字であるかどうかを確認して各文字列を調べ、それを削除して他の文字列と比較することです。
private static int numSmaller(String s, String t){
int ways = 0;
for(int i = 0; i < s.length(); i++){
StringBuilder sbs = new StringBuilder(s);
if(Character.isDigit(s.charAt(i))){
sbs.deleteCharAt(i);
String sub = sbs.toString();
if(sub.compareTo(t) < 0) {
ways++;
}
}
}
for(int i = 0; i < t.length(); i++){
StringBuilder sbt = new StringBuilder(t);
if(Character.isDigit(t.charAt(i))){
sbt.deleteCharAt(i);
String sub = sbt.toString();
if(s.compareTo(sub) < 0){
ways++;
}
}
}
return ways;
}
ご覧のとおり、スペースの複雑さはかなり悪く、コードも冗長に見えます。このコードを最適化する方法はありますか? 文字列ビルダーを使用しない方法や、毎回新しい文字列を作成する方法を知っている人はいますか? どんな入力でも大歓迎です!