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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值