タイトル説明
S
文字列を指定すると、文字ではない文字が所定の位置に保持され、すべての文字の位置が逆になる「反転」文字列 が返されます。
例
入力:「ab-cd!」 出力:「dc-ba!」
アイデア
S.charAt(i)は、文字列Sの左側から始まる文字を表し、S.charAt(j)は、文字列Sの右側から始まる文字を表します。
StringBufferオブジェクトchを作成します
ケース1:左側の文字が文字の場合
- ①右側の文字も文字なので、右側の文字をchにつなぎ合わせます。
- ②右側の文字は文字ではないので、j-、ch、j--にスプライスされた文字を見つけます
ケース2:左側の文字が文字ではない
- 直接にCHに接合文字の左側に
コード
class Solution {
public String reverseOnlyLetters(String S) {
StringBuffer ch=new StringBuffer();
int j=S.length()-1;
for(int i=0;i<S.length();i++){
if(Character.isLetter(S.charAt(i))){
while(!Character.isLetter(S.charAt(j))){
j--;
}
ch.append(S.charAt(j));
j--;
}else{
ch.append(S.charAt(i));
}
}
return ch.toString();
}
}
注:それが文字であるかどうかを判別します。Character.isLetter(XX)、スプライシングXX.append(YY)