反转字符串中的小写字母,在"单词"内部反转,遇到非小写字母(例如大写字母、数字)则保持原位置。
输入:"Hello big World 789a1b",输出"Holle gib Wdlro 789b1a"。
解题思路主要是双指针,还有由于python的字符串不能就地反转,要先转换为列表再转回。
python
def reverses(original_str):
# 按空格将单次切分
strs=original_str.split(' ')
ans=[]
for word in strs:
# 转换类型
word=list(word)
n=len(word)
reverse_word = ['']*n
初始化第二个指针的位置
right=n-1
for i in range(n):
if word[i].islower():
for j in range(right,i,-1):
if word[j].islower():
reverse_word[i]=word[j]
reverse_word[j]=word[i]
right=j-1
break
# 处理最中间的小写字母(不需要互换)或只有单个小写字母的情况
if i==right or j==i+1:
reverse_word[i]=word[i]
# 如果非小写则保持原位置
else:
reverse_word[i]=word[i]
# list转为str
reverse_word=''.join(reverse_word)
ans.append(reverse_word)
# 结果用空格连接
return ' '.join(ans)