关于字符串的那些事

前言


实现replaceAll()方法

Js中并没有定义replaceAll()方法,但可以用为RegExp正则表达式添加全局搜索的方式实现

String.prototype.replaceAll=function(oldStr,newStr){
	return this.replace(new RegExp(oldStr,"g"),newStr)
}

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。

示例 1:输入: “()” 输出: true
示例 2:输入: “()[]{}” 输出: true
示例 3:输入: “(]” 输出: false
示例 4:输入: “([)]” 输出: false
示例 5:输入: “{[]}” 输出: true

  1. 使用Js的replace方法
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    while(s.length){
        var temp = s;
        s= s.replace('()','');
        s= s.replace('[]','');
        s= s.replace('{}','');
        if(temp === s) return false;
    }
    return true
};
  1. 使用Map()和栈来实现
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length===0)return true
    if(s.length%2===1) return false;
    var map = {
        "(":")",
        "[":"]",
        "{":"}",
    }
    var leftArray = []
    for(var char of s){
        if(char in map){
            leftArray.push(char)
        }else{
            if( char != map[leftArray.pop()]  ) return false;
        }
    }
    return !leftArray.length
};

无重复字符的最长子串_中等

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
    if (s.length === 0) return 0
    let len = s.length
    let i = 0, temp = 0, res = 0
    for (let j = i; j < len; j++) {
        temp = s.slice(i, j).indexOf(s[j])
        if (temp === -1) {
            res = Math.max(res, j - i + 1)
        } else {
            i += temp + 1
        }
    }
    return res
};

你可能感兴趣的:(算法)