题解 | #字符串变形#
字符串变形
http://www.nowcoder.com/practice/c3120c1c1bc44ad986259c0cf0f0b80e
思路
- python利用split函数分隔单词成列表,倒置列表后改变大小写,最终串成一个最终的字符串
- 双指针来取单词前后位置
方法一:借助list
用split函数分隔成单词列表,倒置的方法很好写
class Solution: def trans(self, s, n): # write code here l = s.split(' ') # 将原字符串按照空格分隔成list l = l[::-1] # 翻转list内的所有单词 s = "" for letter in l: letter = letter.swapcase() # 调整大小写 s += letter # 重新串成一个字符串 s += ' ' return s[0:len(s)-1] # 最终返回时去掉最后一个空格
复杂度分析
- 时间复杂度:O(n),需要花时间遍历原来的结构
- 空间复杂度:O(n),采取list结构存储了原字符串并进行操作
方法二:双指针
控制单词的前后位置,逆序取出单词,并修改大小写
class Solution: def trans(self, s, n): # write code here r = n res = "" for l in range(n-1, -1, -1): # 从右往左遍历字符串,用l确定左边界 if s[l] == ' ': # 当确定到空格位置时,确定左边界 res += s[l+1:r] + ' ' # 截取单词部分 r = l # 卡住右边界 for l in range(r): res += s[l] # 处理最左侧非空格的情况 return res.swapcase() # 改变大小写
复杂度分析
- 时间复杂度:O(n),访问整个字符串时间
- 空间复杂度:O(n),返回字符串申请的额外空间
不会做题写的题解 文章被收录于专栏
哎呀我好笨呀,一不小心又不会了一道题