【Leetcode笔记】反转字符串Ⅱ-创新互联
一、思路Leetcode原题链接:反转字符串Ⅱ
创新互联是一家集网站建设,保德企业网站建设,保德品牌网站建设,网站定制,保德网站建设报价,网络营销,网络优化,保德网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
- 与反转字符串相比,只是边界条件多了一些,思路基本一致。
- 一个需要注意的点是这里的字符串确实是字符串,处理前后需要转换数据类型,反转字符串里的字符串是由字符组成的列表。
第一遍顺下来写的代码,能通过,但是有不少冗余。
class Solution:
def reverseStr(self, s: str, k: int) ->str:
n = len(s)
fast, slow = -1, -1
count = 0
s = list(s)
while(1):
left = slow + 1
if n - count< k:
right = n - 1
elif k<= n - count< 2 * k:
for i in range(k):
slow += 1
fast += 2
right = slow
else:
for i in range(k):
slow += 1
fast += 2
right = slow
while left< right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
for j in range(k):
count += 2
if count >n:
break
slow = fast
return ''.join(s)
2、个人通过版(改进)在 1 的基础上去掉了一些冗余后的版本。
class Solution:
def reverseStr(self, s: str, k: int) ->str:
n = len(s)
p = 0
s = list(s)
for count in range(0, n, 2*k):
left = p
if n - count< k:
right = n - 1
else:
p += k
right = p - 1
while left< right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
p += k
return ''.join(s)
3、高手版运用了一些算是 python 独有的特点,不需要考虑任何边界条件。
class Solution:
def reverseStr(self, s: str, k: int) ->str:
"""
1. 使用range(start, end, step)来确定需要调换的初始位置
2. 对于字符串s = 'abc',如果使用s[0:999] ===>'abc'。字符串末尾如果超过大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理。
3. 用切片整体替换,而不是一个个替换.
"""
def reverse_substring(text):
left, right = 0, len(text) - 1
while left< right:
text[left], text[right] = text[right], text[left]
left += 1
right -= 1
return text
res = list(s)
for cur in range(0, len(s), 2 * k):
res[cur: cur + k] = reverse_substring(res[cur: cur + k])
return ''.join(res)
三、温故知新列表转为字符串的方法。
a = ['h','e','l','l','o']
print(a)
b = ''.join(a)
print(b)
# ['h','e','l','l','o']
# hello
其中join
函数可以连接字符串,用法:连接任意数量的字符串(包括要连接的元素字符串、元组、列表、字典),用新的目标分隔符连接,返回新的字符串。
举例如下:
## 字符串:
';'.join('abc')
# 输出结果为:'a;b;c'
string1 = 'good idea'#定义字符串
' '.join(string1)
# 输出结果:'g o o d i d e a'
#说明:由于字符串里没指明按字符串之间是怎么连接的,默认每个字符之间插入目标字符
# 元组:
tuple1 = ('a','b','c') #定义元组tuple1
'、'.join(tuple1)
# 输出结果:'a、b、c'
tuple2 = ('hello','peace','world') #定义元组tuple2
' '.join(tuple2)
# 输出结果:'hello peace world'
# 列表
b = ['a','b','c'] #定义列表
'、'.join(b)
# 输出结果:'a、b、c'
list1 = ['hello','peace','world'] #定义列表
' '.join(list1)
# 输出结果:'hello peace world'
## 字典:
c={'hello':1,'world':2}
';'.join(c)
# 输出结果:'hello;world'
d = {'hello':'hi','world':'2'}
' '.join(d)
# 输出结果:'hello world'
部分内容参考代码随想录、python的join函数的用法及实例
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享名称:【Leetcode笔记】反转字符串Ⅱ-创新互联
路径分享:http://scgulin.cn/article/dcpgsh.html