58 翻转字符串

题目描述

把字符串 student. a am I变成正常的顺序

题解

方法1

// 这个方法会把原始字符串两端的空格去掉,字符串中间的超过一个空格还会保持
    public static String reverse(String str){
        if (str.length() == 0) return str;
        str = str.trim();
        String[] strs = str.split(" ");
        StringBuilder sb = new StringBuilder();
//        for (int i = strs.length - 1; i >= 0 ; i--) {
//            for (int j = strs[i].length() - 1; j >= 0 ; j--) {
//                sb.append(strs[i].charAt(j));
//            }
//            sb.append(" ");
//        }
        for(int i = strs.length - 1; i >= 0; --i){
            sb.append(strs[i]);
            sb.append(" ");
        }
        return sb.toString().trim();
   }

方法2

// 这个方法字符串中间和两端的空格都会保留
public static String reverse1(String str){
        if (str.length() == 0) return str;
        char[] chars = str.toCharArray();
        // 翻转整个句子
        coreReverse(chars, 0, chars.length - 1);
        // 翻转每个单词
        int blank = -1;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' '){
                int nxtBlank = i;
                coreReverse(chars, blank + 1, nxtBlank - 1);
                blank = nxtBlank;
            }
        }
        return new String(chars);
}

private static void coreReverse(char[] chars, int low, int high){
     while (low < high){
         char temp = chars[low];
         chars[low] = chars[high];
         chars[high] = temp;
         low++;
         high--;
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值