面试题记录 -- 反转字符串中的单词;

给定一个字符串: let's be the best friends !
希望输出字符串:  s'tel eb eht tseb sdneirf !
要求:对字符串做处理,实现单词的反转,反转之后的结果要保持各个单词的顺序,同时保持单词间的空格;

解题思路:
1、首先获取各个字符串的单词(或者叫子串);
2、然后将各个子串进行反转输出;
考察内容:
1、如何对给定的字符串做处理,并获得各个子串;  【比较容易想到的:通过split方法,将字符串截取成一个个子串】
2、如果对子串进行反转输出; 【比较容易想到的:通过字符串的切片操作实现反向输出】
具体实现:
#coding=utf-8
import os

def reverse_word(s):
    # 切片字符串为子串;
    s = s.split(' ')
    s_temp = ''
    # 遍历子串列表,并依次逆向输出
    for item in s:
        s_temp = s_temp + item[::-1] + ' '
    print s_temp
    
if __name__ == '__main__':
    s = "let's be the best friends !"
    reverse_word(s)
考察内容讲解:
1、字符串的 split 函数
1)split 函数是Python 字符串处理函数,
主要实现: 通过指定分隔符,对字符串进行分割切片;
处理结果: 最终结果为列表,将切片后的子串保存到列表中,并返回最终形成的子串的列表;
2)split 语法 :  split("分隔符", "分割次数")
其中,
参数『分隔符』表示:  用于确定分割的位置;  默认使用『空格、换行(\n)、制表符(\t)』
参数『分割次数』表示  切割几次;  默认分割所有的子串;
s = "hello#world everybody hello#hhhhh"
s.split('#')     // 输出结果为:[hello, world everybody hello, hhhhh]
s.split('#', 1)  // 输出结果为: [hello, world everybody hello#hhhhh]   只用分隔符#,进行一次分割;
s.split()        // 输出结果为: [hello#world, everybody, hello#hhhhh]   参数分隔符省略,则默认使用空格、换行符和制表符进行分割,这里是空格;  参数分割次数省略,则默认分割所有
3)题目中的split讲解:
题目中,split 分隔符为空格,则原字符串会按照空格,进行切分,正好将各个单词切分出来;
split 切分后的结果是保存到列表中的, 故执行 s = s.split(' ') 之后, s  为一个列表,如果输出此时的s ,应该为: ["let's", 'be', 'the', 'best', 'friends', '!']
split 切片后的列表正好可以进行遍历操作,这样就可以通过遍历每个单词,从而对每个单词进行处理;
4)额外的思维:
从这里,突然想到,后续涉及到字符串获取子串的操作,应该都可以通过split 函数进行切片实现, 切片后的各个子串,以列表的形式保存,也可以通过下标自由获取;

2、字符串的切片操作
1) 字符串切片的语法为:  str[start: end: step]    (注意是中括号冒号分割)
start: 表示切片开始的下标; 0表示第一个; -1 表示最后一个;
end:   表示切片的终止位置,但不包括该位置;
step:  表示切片的 step 和方向; 正数表示从右到左,负数表示从左到右;
s = "friends"
s[::1]   // 正向输出串,从0开始,直到结束; 结果为:'friends'
s[::-1]  // 逆向输出串,从-1开始,直到结束;结果为:'sdneirf'
s[0:5:1]  // 正向输出串,从0开始,输出到index为5的位置,其中index=5不输出; 结果为:'frien'
s[-1:5:-2] // 输出结果为:'s'
  // 逆向输出串,从-1开始,输出到index为5的位置,index=5不输出,应该是'ds', step=2,则只输出's'
s[-1:-5:-2] // 输出结果为: 'sn'
  // 逆向输出串, 从-1开始,输出到index为-5的位置,index=-5不输出,应该是'sdne', step=2, 则只输出'sn'
    

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务