一、思路Leetcode原題鏈接:反轉(zhuǎn)字符串Ⅱ
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),保德企業(yè)網(wǎng)站建設(shè),保德品牌網(wǎng)站建設(shè),網(wǎng)站定制,保德網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,保德網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
第一遍順下來寫的代碼,能通過,但是有不少冗余。
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、個(gè)人通過版(改進(jìn))在 1 的基礎(chǔ)上去掉了一些冗余后的版本。
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、高手版運(yùn)用了一些算是 python 獨(dú)有的特點(diǎn),不需要考慮任何邊界條件。
class Solution:
def reverseStr(self, s: str, k: int) ->str:
"""
1. 使用range(start, end, step)來確定需要調(diào)換的初始位置
2. 對(duì)于字符串s = 'abc',如果使用s[0:999] ===>'abc'。字符串末尾如果超過大長(zhǎng)度,則會(huì)返回至字符串最后一個(gè)值,這個(gè)特性可以避免一些邊界條件的處理。
3. 用切片整體替換,而不是一個(gè)個(gè)替換.
"""
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)
三、溫故知新列表轉(zhuǎn)為字符串的方法。
a = ['h','e','l','l','o']
print(a)
b = ''.join(a)
print(b)
# ['h','e','l','l','o']
# hello
其中join
函數(shù)可以連接字符串,用法:連接任意數(shù)量的字符串(包括要連接的元素字符串、元組、列表、字典),用新的目標(biāo)分隔符連接,返回新的字符串。
舉例如下:
## 字符串:
';'.join('abc')
# 輸出結(jié)果為:'a;b;c'
string1 = 'good idea'#定義字符串
' '.join(string1)
# 輸出結(jié)果:'g o o d i d e a'
#說明:由于字符串里沒指明按字符串之間是怎么連接的,默認(rèn)每個(gè)字符之間插入目標(biāo)字符
# 元組:
tuple1 = ('a','b','c') #定義元組tuple1
'、'.join(tuple1)
# 輸出結(jié)果:'a、b、c'
tuple2 = ('hello','peace','world') #定義元組tuple2
' '.join(tuple2)
# 輸出結(jié)果:'hello peace world'
# 列表
b = ['a','b','c'] #定義列表
'、'.join(b)
# 輸出結(jié)果:'a、b、c'
list1 = ['hello','peace','world'] #定義列表
' '.join(list1)
# 輸出結(jié)果:'hello peace world'
## 字典:
c={'hello':1,'world':2}
';'.join(c)
# 輸出結(jié)果:'hello;world'
d = {'hello':'hi','world':'2'}
' '.join(d)
# 輸出結(jié)果:'hello world'
部分內(nèi)容參考代碼隨想錄、python的join函數(shù)的用法及實(shí)例
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧