python提取字符串中的单词_Python基础:给定一个字符串,逐个翻转字符串中的每个单词...

d1e2e535cc15cccddc7bd91d307d3b335f9450fb.png

翻转字符串里的单词

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学习教程也会在继续为大家更新!

如果你想更多的了解Python,点击以下视频跳转链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值