2

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;
}

ご覧のとおり、スペースの複雑さはかなり悪く、コードも冗長に見えます。このコードを最適化する方法はありますか? 文字列ビルダーを使用しない方法や、毎回新しい文字列を作成する方法を知っている人はいますか? どんな入力でも大歓迎です!

4

5 に答える 5