剑指 Offer 58 - I. 翻转单词顺序 (双指针)
剑指 Offer 58 - I. 翻转单词顺序
题意:
翻转一个英文句子中单词顺序
解法1
思路: split分割 + 倒序
public static String reverseWords(String s) {String[] wordsAndSpacing = s.split(" ");StringBuffer buffer = new StringBuffer();int count = 0;// 1. 计数wordsAndSpacing数组中的单词for (int i = 0; i < wordsAndSpacing.length; i++) {if (!wordsAndSpacing[i].equals("")) {count++;}}String[] words = new String[count];int index = 0;// 2. 把wordsAndSpacing中的单词倒序存放到words数组中for (int i = wordsAndSpacing.length - 1; i >= 0; i--) {if (!wordsAndSpacing[i].equals("")) {words[index++] = wordsAndSpacing[i];}}// 3. 遍历words数组,将单词追加到bufferfor (int i = 0; i < words.length; i++) {if (i == words.length - 1) buffer.append(words[i]);else buffer.append(words[i]).append(" ");}return buffer.toString();}
解法2(双指针法)
思路:
- 先去除字符串的前后空格
- 建立双指针倒序扫描字符串:p1用来找字符串中部位置的空格,p2指向子串的右顶点
- p1与p2之间的子串append到StringBuffer中
- 去除StringBuffer的前后空格
public static String reverseWords(String s) {s = s.trim();int p1 = s.length() - 1;int p2 = p1;StringBuffer buffer = new StringBuffer();while (p1 >= 0) {// p1找到第一个空格while (p1 >= 0 && s.charAt(p1) != ' ') p1--;// 把p1与p2之间的单词追加到buffer中buffer.append(s, p1 + 1, p2 + 1).append(" ");// p1跳过空格来到第二个单词尾部while (p1 >= 0 && s.charAt(p1) == ' ') p1--;// p2记录单词右顶点p2 = p1;}return buffer.toString().trim();}
收获:
String类的
trim()
方法是去除前后空格,而不是去除所有空格java中的字符串分割
split()
原理:String s = "00abc00def00";String[] strs = s.split("0");// 把s字符串看作:空串0空串0abc0空串0def0空串0空串// 这里的strs数组中的元素为{"", "", "abc", "", "def", "", ""}
StringBuffer中指定String区间来append,区间是左闭右开
剑指 Offer 58 - I. 翻转单词顺序 (双指针)相关推荐
- 【LeetCode】剑指 Offer 58 - I. 翻转单词顺序
[LeetCode]剑指 Offer 58 - I. 翻转单词顺序 文章目录 [LeetCode]剑指 Offer 58 - I. 翻转单词顺序 一.双指针 一.双指针 算法解析: 倒序遍历字符串 s ...
- 【算法】剑指 Offer 58 - I. 翻转单词顺序
1.概述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出&quo ...
- 【LeetCode笔记】剑指 Offer 58 - I. 翻转单词顺序(Java、栈、双指针)
文章目录 题目描述 思路 & 代码 二刷 题目描述 用栈来做挺简单的,也可以用双指针. 思路 & 代码 既然是反向,那么从后往前,用双指针截取出字符串即可. class Solutio ...
- LeetCode-剑指 Offer 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序 思路一:也是核心思想,就是先把句子中所有字符串取出放入字符串数组,再对数组中的字符串进行操作后重新连接即可,具体问题具体细节还需要按题目要求分析 而遍历 ...
- 剑指 offer set 19 翻转单词顺序 字符串左旋
题目 1. 翻转单词 student. a am I 转换成 I am a student. 2. 字符串左旋 abba 1 转成 bbaa 总结 1. 先对每个单词旋转, 再整齐旋转 2. 先翻转一 ...
- 剑指offer面试题58 - I. 翻转单词顺序(双指针)
题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出&quo ...
- 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词
剑指 Offer 58 - II. 左旋转字符串 把前k个字符移动到结尾 翻转前k个字符,翻转剩余字符 翻转整个字符串 class Solution { public:void reverse(str ...
- LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)
文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...
- 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
[LeetCode]剑指 Offer 58 - II. 左旋转字符串 文章目录 [LeetCode]剑指 Offer 58 - II. 左旋转字符串 一.字符串切片 二.列表遍历拼接 三.字符串遍历拼 ...
最新文章
- 条件随机场 (CRF) 分词序列谈之一(转)
- android ART编译预优化
- C#中怎样在ToolStripMenuItem下再添加子级菜单
- boost::math模块计算 Bessel、Neumann 和 Airy 函数的零点的测试程序
- html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪
- mysql 闪回查询 sql_利用闪回查看Oracle表历史时刻数据
- exit和abort都是用来终止程序的函数
- trycatch处理流IO流中的异常
- pcb布线拐角处打地孔_嵌入式开发必看:	PCB设计的这几个问题,你能明白了吗?...
- Jedis操作reids集群
- funCode课程实训(C++ )
- slam和orbslam3环境配置
- 数据分析—指标体系和报表
- 【转】IOS开发小技巧
- CorelDRAW如何设置填充颜色和边框颜色
- 从“无影”看云电脑的未来
- 怎样查找MP3音乐链接地址 用于QQ空间背景
- android 免root冻结,自冻FreezeYou(超强免ROOT冻结神器)
- 一个后端开发的 Vue 笔记【入门级】
- Altium Designer 14.1.5 Build 30772
热门文章
- Android 软键盘弹出,界面整体上移的问题
- Fortran 学习1--数据类型
- 面向对象的 XSLT编程
- 《设计模式详解》行为型模式 - 命令模式
- 量化策略回测ATRRSI
- 数据分析角度拆解可怕的庞氏骗局,究竟是怎么骗到人的?
- java实现文件上传和文件查看、下载
- android应用程序列表,List列表应用程序-小知识 #103
- php 给注册加上限制条件,在注册用户时用两个条件限制,该如何处理
- 并注册烧写钩子 获取启动介质类型_PyTorch中对张量登记注册反向传播的钩子函数,并展示调用顺序...