我们可能首先想到的是利用split()方法分割,然后利用StringBuffer逆序输出数组中字符串进行拼接!可是这样的空间复杂度比较高!
先将字符串转为char[],然后整体对char[]进行逆序反转然后再根据空格位置,对每一个单词再次逆序反转直接上代码:
//反转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); }运行结果: