全面的前端编程教程 - 秘密武器开发者中心

热搜:m1 代理 前端 301

翻转字符串算法|小算法

2020-09-19 01:20:13

翻转字符串。

例如, ​reverseString("abc")​ 字符串需转成 ​"cba"​ 字符串。

通用

function reverseString(str) {

  return str.split('').reverse().join('')
  
}

reverseString("mimiwuqi");

 

数字翻转

function reverseNumber(n) {
    var reversed = 0
    while (n != 0) {
        reversed *= 10
        reversed += n % 10
        n -= n % 10
        n /= 10
    }
    return reversed
}

console.log(reverseNumber(mimiwuqi)) // 输出: iquwimim
 

如果含有数字和字母,并且只需要翻转数字部分保持字母部分不变,这个问题就复杂一些。下面是其中一种方法:

function reverseNumberInString(str) {
    var nums = str.split(/([a-zA-Z]+)/);
    for(let i=0; i<nums.length; i++){
        if(!isNaN(nums[i])){
            nums[i] = nums[i].split('').reverse().join('');
        }
    }
    return nums.join('');
}

console.log(reverseNumberInString('abc345efg1'));  // 输出: abc543efg1


这个函数首先使用 split 函数将输入的字符串分割为数字和非数字的部分,然后针对每一个部分,如果是数字,就将其翻转。最后再将所有部分合并回一个字符串。这就完成了将字符串中的数字翻转,而保持非数字部分不变的操作。

如果你希望将字符串中的数字彻底翻转,同时字母的位置保持不变,我们需要创建一个新的算法:

function reverseCompleteNumberInString(str) {
    let numbers = str.replace(/[^\d]/g, '').split(''); // 获取字符串中所有数字并反转
    numbers = numbers.reverse();

    let result = str.split('').map((el) => {
        if (!isNaN(el)) {
            return numbers.shift();
        }
        return el;
    });

    return result.join('');
}

console.log(reverseCompleteNumberInString('abc345efg1'));  // 输出: abc143efg5


这个函数的工作原理是:首先,获取所有数字并存储在数组中,并且反转这个数组。然后,遍历原来的字符串,每遇到一个数字就用数组中的最后一个元素(也就是反转后的第一个元素)替换。这样,就可以完全翻转原字符串中的数字,同时保持字母位置不变。