字符串翻转

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
};
posted @ 2020-02-02 23:05  windalm  阅读(182)  评论(0编辑  收藏  举报