剣はオファーを指します—58。単語の順序を逆にする—分析とコード(Java)

1.タイトル

ニウケは最近、新入社員のフィッシュに来て、毎朝英語の雑誌を読み、ノートに文章を書いていました。同僚の猫はフィッシュの書いたものにとても興味があり、ある日フィッシュから借りて読んだのですが、読めませんでした。たとえば、「student。aamI」です。後で、この男が文中の単語の順序を逆にしたことに気づきました。正しい文は「私は学生です」であるはずです。猫はこれらの言葉を一つずつひっくり返すのが苦手です。助けてくれませんか。

2、分析とコード

1.2回のフリップ

(1)考える

最初に各単語を反転し、次に文全体を2回反転して、目標を達成します。

(2)コード

public class Solution {
    
    
    public String ReverseSentence(String str) {
    
    
        if (str.trim().equals(""))
            return str;
        
        char[] chstr = str.toCharArray();
        int l = 0, length = str.length();
        for (int i = 0; i < length; i++) {
    
    
            if (chstr[i] == ' ') {
    
    
                Reverse(chstr, l, i - 1);
                l = i + 1;
            }
            if (i == length - 1 && l < i)
                Reverse(chstr, l, length - 1);
        }
        
        Reverse(chstr, 0, length - 1);
        return String.valueOf(chstr);
    }
    
    public void Reverse(char[] chstr, int l, int r) {
    
    
        int m = (l + r) >> 1;
        for (int i = l; i <= m; i++) {
    
    
            char temp = chstr[i];
            chstr[i] = chstr[l + r - i];
            chstr[l + r - i] = temp;
        }
        return;
    }
}

(3)結果

実行時間:21ms、占有メモリ:9648k。

2.直接スプライシング

(1)考える

補助スペースが許可されている場合は、元の文字列を直接接続するだけです。

(2)コード

public class Solution {
    
    
    public String ReverseSentence(String str) {
    
    
        if (str.trim().equals(""))
            return str;
        String[] substr = str.split(" ");
        String ans = substr[substr.length - 1];
        for (int i = substr.length - 2; i >= 0; i--)
            ans = ans.concat(" " + substr[i]);
        return ans;
    }
}

(3)結果

実行時間:20ms、占有メモリ:9360k。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/112040516