当前位置: 首页 > news >正文

《算法通关村——反转字符串中的单词问题解析》

《算法通关村——反转字符串中的单词问题解析》

151. 反转字符串中的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

**注意:**输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2:

输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ' '
  • s至少存在一个 单词

利用API

public String reverseWords(String s) {if (s == null || s.length() == 0) {return s;}// 除去开头和末尾的空白字符,记住这个操作s = s.trim();// 正则匹配连续的空白字符作为分隔符分割List<String> wordList = Arrays.asList(s.split("\\s+"));Collections.reverse(wordList);return String.join(" ", wordList);}

手写

理解: 这里首先把所有的字符串进行一个翻转,然后把其中的单词再次反转,达到单词是正序的目的

class Solution {public String reverseWords(String s) {StringBuilder sb = trimSpaces(s);// 翻转字符串reverse(sb, 0, sb.length() - 1);// 翻转每个单词reverseEachWord(sb);return sb.toString();}public StringBuilder trimSpaces(String s) {int left = 0, right = s.length() - 1;// 去掉字符串开头的空白字符while (left <= right && s.charAt(left) == ' ') {++left;}// 去掉字符串末尾的空白字符while (left <= right && s.charAt(right) == ' ') {--right;}// 将字符串间多余的空白字符去除StringBuilder sb = new StringBuilder();while (left <= right) {char c = s.charAt(left);if (c != ' ') {sb.append(c);} else if (sb.charAt(sb.length() - 1) != ' ') {sb.append(c);}++left;}return sb;}public void reverse(StringBuilder sb, int left, int right) {while (left < right) {char tmp = sb.charAt(left);sb.setCharAt(left++, sb.charAt(right));sb.setCharAt(right--, tmp);}}public void reverseEachWord(StringBuilder sb) {int n = sb.length();int start = 0, end = 0;while (start < n) {// 循环至单词的末尾while (end < n && sb.charAt(end) != ' ') {++end;}// 翻转单词reverse(sb, start, end - 1);// 更新start,去找下一个单词start = end + 1;++end;}}
}
http://www.lryc.cn/news/239823.html

相关文章:

  • C++使用Tensorflow2.6训练好的模型进行预测
  • 5-1 Java 网络编程
  • 汇编-CALL和RET指令
  • STM32_5(中断)
  • docker 部署hbase 并且java Api连接
  • EasyExcel listener无法通过Autowired注入xxMapper
  • Android Spannable 使用​注意事项
  • Apache访问控制
  • 二、类与对象(二)
  • Pytorch从零开始实战10
  • 设计模式-单例模式实战
  • requests库出现AttributeError问题的修复与替代方法
  • opencv-2D直方图
  • 读像火箭科学家一样思考笔记06_初学者之心
  • 中职组网络安全 Server-Hun-1.img Server-Hun-2.img
  • 基于区域划分的GaN HEMT 准物理大信号模型
  • laravel引入element-ui后,blade模板中使用elementui时,事件未生效问题(下载element-ui到本地直接引入项目)
  • 【计算机网络笔记】路由算法之层次路由
  • 【华为OD机试python】分糖果【2023 B卷|100分】
  • ARM 汇编基础
  • 虹科Pico汽车示波器 | 汽车免拆检修 | 2017款东风本田XR-V车转向助力左右不一致
  • 阿里云服务器ECS经济型e实例优惠99元性能怎么样?
  • vue3引入vuex基础
  • C++二维数组中的查找
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 2
  • Qt+sqlite3使用事务提升插入效率
  • 【深度学习】不用Conda在PP飞桨Al Studio三个步骤安装永久PyTorch环境
  • SpringBoot:kaptcha生成验证码
  • C/C++ 使用API实现数据压缩与解压缩
  • Visual Studio连接unity编辑器_unity基础开发教程