【单词倒序】

题目描述

输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。

输入描述:

输入字符串S,S的长度 1 ≤ N ≤ 100

输出描述:

输出倒序后的字符串

示例1   输入输出示例仅供调试,后台判断数据一般不包含示例

输入
yM eman si boB.
输出
My name is Bob.

示例2   输入输出示例仅供调试,后台判断数据一般不包含示例

输入
woh era uoy ? I ma enif.
输出
how are you ? I am fine.

备注

标点符号左右的空格 ≥ 0,单词间空格>0

题目解析

考察字符串的基础知识,难点在于对于三种符号的处理

python代码一:分类,硬编码

def revstr(s):
    c = [' ', '?', '.', ',']
    ns = ''
    l = []
    s = s.split(' ')
    for i in s:
        if len(i)==0:
            l.append(i)
        if i.isalpha() or len(i)!=0:
            l.append(i[::-1])
        if not i.isalpha() and len(i) > 1:
            ll = []
            ii = list(i)
            for j in range(len(i)):
                if not i[j].isalpha():
                    ll.append((j, i[j]))
                    ii.pop(j)
            ii = ii[::-1]
            for x in ll:
                ii.insert(x[0], x[1])
            l.append(''.join(ii))
    ns += ' '.join(l)
    return ns
s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'
revstr(s1)
revstr(s2)

python代码二:从左到右遍历每一个字符,如果字符是 , . ? 或者空格,择将前面的内容倒序,然后以该分隔符或空格为起点继续依次计算。

def revstr(s):
    ns = ''
    start = end =  0
    c = [' ','?','.',',']
    if len(s)==1:
        print(s)
        return s
    for i in range(0,len(s)):
        if  s[i]  in c:
            ns += s[start:end][::-1]
            ns += s[end]
            start = end+1
        end += 1

    print(ns)
    return ns

s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'
revstr(s1)
revstr(s2)

python代码三:从左到右遍历每一个字符,如果字符是 , . ? 或者空格,则看成一个分界符,将分界符之间的单词片段进行倒序。

import re
def revstr(s):
    p = re.compile(r'[\\,\\.\\?\s]')
    indx = [-1]
    for i in range(len(s)):
        if p.match(s[i]):
            indx.append(i)
    indx.append(len(s))
    
    l = [c for c in s]
    for i in range(len(indx) -1):
        left = indx[i] + 1
        right = indx[i+1] - 1
        while left < right:
            l[left],l[right] = l[right],l[left]
            left += 1
            right -= 1
    res = ''.join(l)
    print(res)
    return res
s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值