编程题目:反转域名
1. 题目
将一个域名翻转, 例如 www.baidu.com 变成 com.baidu.www , 空间复杂度为 O(1)
2. 思路
- 因为空间复杂度为 O(1) , 所以只能声明定量的基本类型变量
- 将字符串转成字符数组, 将尾部的字符存到一个变量里,然后把索引都往后移动,再把临时储存的字符放到首部索引
- 遇到
.
,说明前面的字符都反转完毕,不需要再变动了,故把首部索引往后设置
3. 实现
function reverse(domain) { const charList = domain.split('') let headIdx = 0; for (let i = 0; i < domain.length; i++) { const tailChar = charList[charList.length - 1] if (tailChar === '.') { headIdx = i move(charList, headIdx) charList[headIdx] = '.' headIdx++ } else { move(charList, headIdx) charList[headIdx] = tailChar } } return charList.join('') } function move(charList, startIdx) { for (let i = charList.length - 1; i > startIdx; i--) { charList[i] = charList[i - 1] } } console.log(reverse('www.bing.com')) console.log(reverse('ad.monitor.baidu.com'))
com.bing.www com.baidu.monitor.ad