题目
分析与代码
诚实的来说,在不用额外空间的情况下,我一开始并没有想到好的办法,
看了题解,才意识到
- 先翻转前n个子串
- 翻转后n个子串
- 翻转整串
func reverseLeftWords(ss string, n int) string {
// 不可以申请额外空间
s := []byte(ss)
if len(s)==0{
return ""
}
if n>len(s){
return ss
}
// 反转前n子串
left, right := 0, n -1
reverse(&s, left, right)
// 反转n到最后子串
left, right = n, len(s)-1
reverse(&s, left, right)
// 反转整个字符串
left, right = 0, len(s)-1
reverse(&s, left, right)
return string(s)
}
func reverse(s *[]byte, left, right int){
for left<=right{
(*s)[left], (*s)[right] = (*s)[right], (*s)[left]
left++
right--
}
}