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

Python学习教程:给定一个字符串,逐个翻转字符串中的每个单词

本期跟大家分享的Python学习教程是翻转字符串中的单词,有兴趣的伙伴,可以进来学习啦!

翻转字符串里的单词

Given an input string, reverse the string word by word.

示例 1:

输入: "the sky is blue"
输出: "blue is sky the"
复制代码

示例 2:

输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
复制代码

示例 3:

输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
复制代码

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

Note:

  • A word is defined as a sequence of non-space characters.
  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up:

For C programmers, try to solve it in-place in O(1) extra space.

解题思路:

Java 字符串不支持运算符重载,无法用原地解法。 我们将字符串转为字符型数组并用两个指针来解这道题。指针 i 作为原字符串转为字符数组的索引,从右向左移。指针 j 作为新字符数组索引,从左向右赋值得到原数组 count 长度的字符。count记录遇到的字母数量,每次遇到 空格 字符,新数组得到从该空格字符 向右 count 个字符并刷新count 计数。

Java:

class Solution {
 public String reverseWords(String s) {
 if (s.length()==0)return s;//如果为空直接返回
 char strs[]=s.toCharArray(),ans[]=new char[s.length()];//字符串转为char字符数组
 int count=0,j=0;//全局变量j记录新数组索引
 for(int i=s.length()-1;i>=0;i--){指针i从右向左遍历strs字符
 if(strs[i]==' '){//判断是否为空格字符
 int k=i+1;
 if(count>0){
 while (--count>=0){//从字符i向右count个字符赋给新数组ans
 ans[j++]=strs[k++];
 }
 ans[j++]=' ';
 count=0;//count初始化为0
 }
 }else if(i==0){
 for(;i<=count;i++)ans[j++]=strs[i];//左移到第一个字符时证明不是以空格开头,则从0获取count+1个个字符赋给ans
 j+=1;
 break;
 }
 else {
 count++;//如果是字母,则count累加1
 }
 }
 if(j<1)return "";//如果j依然是0,则原字符串全为空格,返回空字符串
 String string=String.valueOf(ans,0,j-1);//char数组转为字符串返回
 return string;
 }
}
复制代码

为了考虑性能,转成了多个判断,所以有些繁琐。最终运行:Your runtime beats 99.91 % of java submissions

Python3:

python完全可以实现Java的思路,不再复现。这里利用函数投机取巧:

split() ,它可以把传入字符串剔除空格后返回 所有单词的数组

join() ,它可以指定一个数组以特定字符为间隔,拼接成一个字符串

加上 [::-1] 反转数组,一行代码既可实现该题目要求

’ abc def ’原字符串

[‘abc’ , ‘def’]剔除空格返回String型单词数组

[‘def’ , ‘abc’]切片反转数组

‘def abc’拼接成字符串

class Solution:
 def reverseWords(self, s: str) -> str:
 return " ".join(s.split()[::-1]) # 剔除所有空格字符返回数组并反转,以空格为间隔把数组拼成字符串
复制代码

这期的翻转字符串里的单词的相关教程先跟大家分享这么多,更多的Python学习教程也会在下期继续为大家更新!


转载于:https://juejin.im/post/5d2bf074f265da1b961334ed

相关文章:

  • 相关函数
  • Vue_cli 打包报错
  • 各种数学符号
  • C# 如何异步查询数据库
  • unity崩溃日志目录
  • Java蓝桥杯——排列组合
  • 经典bug集锦
  • javassit(1) 基础概念
  • unity中Playable的使用
  • 设计已死?
  • 镜花缘——李汝珍著
  • 破译肢体语言密码——王邈著
  • 探寻胡适的精神世界——欧阳哲生著
  • 新开通一个英文博客
  • 大宋国士——陈启文著
  • SegmentFault for Android 3.0 发布
  • fetch 从初识到应用
  • IDEA常用插件整理
  • Java|序列化异常StreamCorruptedException的解决方法
  • 编写符合Python风格的对象
  • 不上全站https的网站你们就等着被恶心死吧
  • 反思总结然后整装待发
  • 数组的操作
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 微信小程序开发问题汇总
  • 项目实战-Api的解决方案
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #DBA杂记1
  • #define 用法
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.ajax()方法详解
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C语言)二分查找 超详细
  • (Git) gitignore基础使用
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (zt)最盛行的警世狂言(爆笑)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (转)Oracle存储过程编写经验和优化措施
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .apk文件,IIS不支持下载解决
  • .java 9 找不到符号_java找不到符号
  • .net Application的目录
  • .NET DataGridView数据绑定说明
  • .net framework4与其client profile版本的区别
  • .net mvc部分视图
  • .NET 常见的偏门问题
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验