【LeetCode-面试算法经典-Java实现】【151-Reverse Words in a String(反转字符串中的单词)】
2015-08-20 06:35
1151 查看
【151-Reverse Words in a String(反转字符串中的单词)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
Given an input string, reverse the string word by word.For example,
Given s =
"the sky is blue",
return
"blue is sky the".
题目大意
给定一个字符串,将其反转,其的字词不转解题思路
先对整个字符串反转,再将每个单词进行反转代码实现
算法实现类public class Solution { public String reverseWords(String s) { if (s == null) { return null; } char[] chars = s.toCharArray(); // 字符压缩 int realLength = compressWhiteSpace(chars); // 交换整个字符串 swapRange(chars, 0, realLength - 1); // 记录单词的起点 int start = 0; // 记录单词的终点 int end; while (start < realLength) { // 从start位置开始找第一个非空白字符 while (start < realLength && chars[start] == ' ') { start++; } end = start + 1; // 找第一个空白字符 while (end < realLength && chars[end] != ' ') { end++; } // 反转字符 swapRange(chars, start, end - 1); // 记录新的开始位置 start = end; } return new String(chars, 0, realLength); } /** * 对字符数组的的空白字符进行压缩 * * @param chars 字符数组 * @return 新的长度 */ public int compressWhiteSpace(char[] chars) { if (chars == null || chars.length == 0) { return 0; } // 放在字符的位置 int pos = 0; for (int i = 0; i < chars.length; i++) { // 从i位置开始找第一个非空白字符 while (i < chars.length && chars[i] == ' ') { i++; } // 已经处理完了 if (i >= chars.length) { break; } // 从i位置开始处理非空白字符,直到遇到空白字符 // 就是处理一个单词 while (i < chars.length && chars[i] != ' ') { chars[pos] = chars[i]; pos++; i++; } // 处理完一个单词要空一格,最后一个单词不有多空一格【A】 if (pos < chars.length) { chars[pos] = ' '; } pos++; } // int result = pos - 1; // System.out.println("|" + new String(chars, 0, result) + "|"); // 说明字符串中只有空白字符 if (pos == 0) { return 0; } else { // System.out.println("|" + new String(chars, 0, pos - 1) + "|"); // 减一就是要去掉多余的一个空格,见【A】 return pos - 1; } } /** * 反转字字数数组中[x, y]位置的字符 * * @param chars 字符数组 * @param x x位置 * @param y y位置 */ public void swapRange(char[] chars, int x, int y) { for (; x < y; x++, y--) { swap(chars, x, y); } } /** * 交换数组中x,y两个位置的单词 * * @param chars 字符数组 * @param x x位置 * @param y y位置 */ public void swap(char[] chars, int x, int y) { char z = chars[x]; chars[x] = chars[y]; chars[y] = z; } }
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。特别说明
欢迎转载,转载请注明出处【/article/1324053.html】
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 一般程序员有以下几种发展路线
- 黑马程序员——java概述
- android面试常见问题总结
- 黑马程序员-------Java笔记--------编程基础
- 剑指Offer面试题:6.用两个栈实现队列
- 黑马程序员——OC的内存管理——MRC
- C#程序员经常用到的10个实用代码片段
- 9秒学院:程序员未来发展三大方向
- 怎样才能成为被人需要的IT男
- 老板会喜欢那种程序员
- 黑马程序员---学习笔记6:字符串
- 一个优秀的程序员是如何炼成的?(大神、小白通吃的干货,不信你
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 【微软面试题01】二元查找树转换为双向链表(未完成)
- 剑指Offer面试题:5.重建二叉树
- 运维面试经验
- 常见面试之机器学习算法思想简单梳理
- XX宝面试题——css部分
- XX宝面试题——JS部分