编程题目:反转域名

目录

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

日期: 2023-03-06

作者: 钟远君

Validate