面筋:Java实现''the sky is blue''反转输出为"blue is sky the"

思路

我们可能首先想到的是利用split()方法分割,然后利用StringBuffer逆序输出数组中字符串进行拼接!可是这样的空间复杂度比较高!

  1. 先将字符串转为char[],然后整体对char[]进行逆序反转
  2. 然后再根据空格位置,对每一个单词再次逆序反转

实现

直接上代码:

    //反转char[]字符数组的方法
    private static void reverse(char[] ch, int left, int right) {
        char tmp = ' ';
        while (left < right) {
            tmp = ch[left];
            ch[left] = ch[right];
            ch[right] = tmp;
            left++;
            right--;
        }
    }

   
    private static String reverseString(String source) {
        char[] array = source.toCharArray();
        reverse(array, 0, array.length - 1);//先将整体字符串反转
        //再以空格为界限,将每一个单词反转
        int cursor = 0;
        while (cursor < array.length) {
            int start = cursor;
            while (cursor < array.length && array[cursor] != ' ') {//找到每个单词
                cursor++;
            }
            reverse(array, start, cursor - 1);//逆置每个单词
            if (cursor < array.length && array[cursor] == ' ') {
                cursor++;
            }

        }
        return String.valueOf(array);
    }

   public static void main(String[] args) {
        String data = "the sky is blue";
        String result = reverseString(data);
        System.out.println(result);
    }

运行结果:
在这里插入图片描述

你可能感兴趣的:(算法,JAVA学习笔记)