本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目来自牛客网的华为机试题库,本题目为简单题
HJ31 单词倒排
描述
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
输入描述:
输入一行,表示用来倒排的句子
输出描述:
输出句子的倒排结果
示例1
输入:I am a student
输出:student a am I
示例2
输入:$bo*y gi!r#l
输出:l r gi y bo
s = input()
re = []
i = 0
while i < len(s):
k = ''
while i < len(s) and (('a' <= s[i] <='z') or ('A' <= s[i] <='Z')):
k += s[i]
i += 1
re.append(k)
i += 1
print(' '.join(re[::-1]))
解析
倒序输出单词,并且以空格为间隔。刚刚看到的时候感觉很难啊,因为每次输入的字符串里间隔符都不一样,没有办法直接split把它们分开,而且还会出现两个空格的情况,容易分出空白字符串。后来看别人的方法是先去除那些奇奇怪怪的分隔,然后再重排,也不是很简单。最后想到可以用直接跳过分隔符的方式来把句子倒过来。
具体方法
1.用两层while循环,把输入的里面用分隔符分开的字符串们保存成一个数组
2.把里保存的字符串们,倒序且使用空格为分隔符连接在一起
3.就可以得到满足要求的字符串了啊
虽然还是很笨的方法,但是解决问题就好了啊