LeetCode:仅仅反转字母

题目描述

给定一个字符串 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)

猜你喜欢

转载自blog.csdn.net/weixin_43939602/article/details/114144098