剣はオファーを指します-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、その他
何もありません。