• 字符串翻转


    1.翻转字符串

    var str = "smile at life";
    console.log(str.split(" ").reverse().join(" "))//life at smile  
    console.log(str.split("").reverse().join(""))//efil ta elims  这种方法是错误的,所以记住要使用上面一种形式
    
    • join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

    • split()

      • split() 方法用于把一个字符串分割成字符串数组。

      • 两个参数,第一个是以什么元素进行分割,第二个是保留的

      • 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

      • var str1="How are you doing today?"
        document.write(str1.split(" ") + "<br />")//How,are,you,doing,today?
        document.write(str1.split("") + "<br />")//H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
        document.write(str1.split(" ",3))//How,are,you
        

    2.替换空格

    var str = "smile at life";
    //方法一: 先转成字符数组,再把数组中的所有字符放入一个字符串
    console.log(str.split(" ").join("%20"))//smile%20at%20life
    //方法二: 使用正则替换
    console.log(str.replace(/s/g,'%20'))//smile%20at%20life
    

    3.左旋转字符串(剑指offer)

    function LeftRotateString(str, n) {
      if (str === null || str.length === 0) return '';
      n = n % str.length;
      return str.slice(n) + str.slice(0, n);
    }
    
    • slice()

      • slice() 方法可从已有的数组中返回选定的元素。

      • arrayObject.slice(start,end) 如果没有指定end参数,那么切分的数组包含从 start 到数组结束的所有元素。

      • 返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

      • 注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

    4.字符串同构

    1. Isomorphic Strings (Easy)

    Leetcode / 力扣

    Given "egg", "add", return true.
    Given "foo", "bar", return false.
    Given "paper", "title", return true.
    

    方法一:记录一个字符上次出现的位置,如果两个字符串中的字符上次出现的位置一样,那么就属于同构。(80ms)

    /**
     * @param {string} s
     * @param {string} t
     * @return {boolean}
     */
    var isIsomorphic = function(s, t) {
        const preIndexOfS = [];
        const preIndexOfT = [];
        for (let i = 0; i < s.length; i++) {
            const sc = s.charAt(i), tc = t.charAt(i);
            if (preIndexOfS[sc] != preIndexOfT[tc]) {
                return false;
            }
            preIndexOfS[sc] = i + 1;
            preIndexOfT[tc] = i + 1;
        }
        return true;
    };
    

    方法二:使用一一映射的方法,(72ms),构造两个对象,以egg和add为例,sMap={e:a},如果不存在,就添加进去,如果存在,判断e是不是等于之前已经存在的a

    var isIsomorphic = function(s, t) {
      const sMap = {}
      const tMap = {}
      for (let i = 0; i < s.length; i++) {
        const si = s[i]
        const ti = t[i]
        if (sMap[si]) {
          if (sMap[si] !== ti) return false
        } else {
          sMap[si] = ti
        }
        if (tMap[ti]) {
          if (tMap[ti] !== si) return false
        } else {
          tMap[ti] = si
        }
      }
      return true
    };
    
  • 相关阅读:
    《代码阅读与实践》阅读笔记*part1
    HDFS JAVA API
    《需求工程》阅读笔记*part3
    《需求工程》阅读笔记*part2
    HDFS文件命令
    HOG特征+SVM行人检测
    winchecksec安装踩坑
    加壳:挂起方式创建进程
    内存写入注入
    远程线程注入
  • 原文地址:https://www.cnblogs.com/zhoujingguoguo/p/12254219.html
Copyright © 2020-2023  润新知