LeetCode笔记:反转字符串

问题

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:

输入:["h","e","l","l","o"]

输出:["o","l","l","e","h"]

示例 2:

输入:["H","a","n","n","a","h"]

输出:["h","a","n","n","a","H"]

ACSII 码可打印字符

十进制符号中文解释十进制符号中文解释
32空格80P大写字母 P
33!感叹号81Q大写字母 Q
34"双引号82R大写字母 R
35#井号83S大写字母 S
36$美元符84T大写字母 T
37%百分号85U大写字母 U
38&86V大写字母 V
39单引号87W大写字母 W
40(左括号88X大写字母 X
41)右括号89Y大写字母 Y
42*星号90Z大写字母 Z
43+加号91[左中括号
44,逗号92\ 反斜杠
45-连字号或减号93]右中括号
46.句点或小数点94^音调符号
47/斜杠95_下划线
480096`重音符
491197a小写字母 a
502298b小写字母 b
513399c小写字母 c
5244100d小写字母 d
5355101e小写字母 e
5466102f小写字母 f
5577103g小写字母 g
5688104h小写字母 h
5799105i小写字母 i
58:冒号106j小写字母 j
59;分号107k小写字母 k
60<小于108l小写字母 l
61=等号109m小写字母 m
62>大于110n小写字母 n
63?问号111o小写字母 o
64@电子邮件符号112p小写字母 p
65A大写字母 A113q小写字母 q
66B大写字母 B114r小写字母 r
67C大写字母 C115s小写字母 s
68D大写字母 D116t小写字母 t
69E大写字母 E117u小写字母 u
70F大写字母 F118v小写字母 v
71G大写字母 G119w小写字母 w
72H大写字母 H120x小写字母 x
73I大写字母 I121y小写字母 y
74J大写字母 J122z小写字母 z
75K大写字母 K123{左大括号
76L大写字母 L124|垂直线
77M大写字母 M125}右大括号
78N大写字母 N126~波浪号
79O大写字母 O127删除

解法

思路:

  1. 先为每一个字符加一个顺序标识
  2. 按照标识的顺序,倒序排序这个数组,达到反转效果
  3. 提取反转后的数组中的关键字符,重新设置这个字符

注意:

问题中的要求是 ASCII 码表中的可打印字符,基于这个要求,如果在第一步加顺序标识的时候,用 ['0-a','1-b','2-c']的分割字符的方式来排序,是不够严谨的。

代码:

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function (s) {
  /**
   * 为每个字符加一个顺序标识
   *
   * ['a','b','c']
   *
   * =>
   *
   * [
   *     {index:0,str:'a'},
   *     {index:1,str:'b'},
   *     {index:2,str:'c'},
   * ]
   */
  s.map((item, index) => {
    return {
      index: index,
      str: item,
    };
  })
    /**
     * 倒序排序
     *
     * [
     *      {index:0,str:'a'},
     *      {index:1,str:'b'},
     *      {index:2,str:'c'},
     * ]
     *
     * =>
     *
     * [
     *      {index:2,str:'c'},
     *      {index:1,str:'b'},
     *      {index:0,str:'a'},
     * ]
     */
    .sort((a, b) => {
      return b.index - a.index;
    })
    /**
     * 还原
     *
     * [
     *      {index:2,str:'c'},
     *      {index:1,str:'b'},
     *      {index:0,str:'a'},
     * ]
     *
     * =>
     *
     * [
     *      'c',
     *      'b',
     *      'a',
     * ]
     */
    .forEach((item, index, arr) => {
      s[index] = item.str;
    });
};

参考

评论