01 题目描述输入一个英文句子 , 翻转句子中单词的顺序 , 但单词内字符的顺序不变 。为简单起见标点符号和普通字母一样处理 。例如输入字符串"I am a student." 翻转后是"student. a am I"
02 解题这道题我们可以分两步 , 第一步翻转所以字符的顺序如:I am a student. 翻转为 .tnedut a ma i 。第二步 , 将每个单词中的所有字符翻转 , 结果为 student. a am i 。
翻转数组实现:一个首指针start=0 , 尾指针end=arrays.length-1 。分别指向字符串数组的头和尾 。交换start和end所在位置的值 。之后start++ , end--;直到start >= end;
![算法系列之翻转单词顺序](http://img.jiangsulong.com/220406/061522C53-0.jpg)
文章插图
【算法系列之翻转单词顺序】翻转代码
public static void reverse(char[] chars, int start, int end) { while (start < end) { char tmp = chars[start]; chars[start] = chars[end]; chars[end] = tmp; start ++; end --; }}第二步:翻转单词内部顺序
如 .tnedut a ma i 。
记start=0 , end=0;end++ 到下一个空格end=6 , 翻转 start 到end-1的值 ,
之后进入下一个单词 end++; start=end;end继续遍历到空格 , 翻转start到end-1的值 。直到最后一个单词
public static char[] reversewords(char []words) { if (words == null || words.length == 0) { return null; } int start = 0, end = 0; reverse(words, start, words.length - 1); // 1. 翻转整个数组 while (end < words.length) { if (words[end] != ' ') { end ++; } else { reverse(words, start, end - 1); end ++; start = end; } } System.out.println(words); return words;}
推荐阅读
- 支付开发填坑记之支付宝
- 常用排序算法总结
- (闽南语版)石亭绿茶系列故事十_石亭传承
- 泡沫红茶冲泡法
- 花茶既有茶之清韵 又有花之柔艳 欣赏 花茶的冲泡法
- 瘦大腿、瘦小腿 经络学习之胆经
- 简单易学小儿推拿课程之补脾经怎么补
- 赵之心:茶是养生的好东西
- 酸为什么是“五味”之首?解构中国人的酸食DNA
- 选茶 三前摘翠采茶之候 贵在其时