Leetcode 51420:最长回文子串-最长公共前缀-有效括号

Posted hello,是翠花呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 51420:最长回文子串-最长公共前缀-有效括号相关的知识,希望对你有一定的参考价值。

自己的思路,仅供参考。
一。给你一个字符串 s,找到 s 中最长的回文子串。

/*给你一个字符串 s,找到 s 中最长的回文子串。*/

function longestPalindrome(s) {
  if (s.length === 1) {
    return s
  }

  if (isReverse(s)) {
    return s
  }

  let len = 0
  let newS = s
  let str = ''
  let sLength = s.length - 1

  let n = Math.floor(s.length / 2)  // 9/2=4.5
  let m = 0
  while (m <= n) {
    let ss = newS.slice(m, -m)
    if (isReverse(ss)) {
      if (ss.length > len) {
        len = ss.length
        str = ss
      }
    }
    m++
  }

  let i = 0
  while (i < sLength) {
    let ss = newS.slice(i)
    if (isReverse(ss)) {
      if (ss.length > len) {
        len = ss.length
        str = ss
      }
    }
    i++
  }

  let j = sLength
  while (j >= 0) {
    let ss = newS.slice(0, -j)
    if (isReverse(ss)) {
      if (ss.length > len) {
        len = ss.length
        str = ss
      }
    }
    j--
  }

  let h = 0
  let ss
  let u = sLength
  while (u >= 0) {
    for (h = 0; h < sLength; h++) {
      ss = newS.slice(h, -u)
      if (isReverse(ss)) {
        if (ss.length > len) {
          len = ss.length
          str = ss
        }
      }
    }
    u--
  }
  return str
}

function isReverse(s) {
  let i = Math.floor(s.length / 2)
  while (i >= 0) {
    if(s[i] != s[s.length - i-1]){
      return false
    }
    i--
  }
  return true
}

二。编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

/*编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。*/
function longestCommonPrefix(strs) {
  if (strs.length === 1) {
    return strs[0]
  }
  let minL = ''
  for (let i = 0; i < strs.length; i++) {
    if (!minL) {
      minL = strs[i]
    } else {
      if (strs[i].length < minL.length) {
        minL = strs[i]
      }
    }
  }

  if(!minL) {
    return ''
  }

  let str = ''
  let n

  for (let i = 0; i < minL.length; i++) {
    for (let j = 0; j < strs.length; j++) {
      if(strs[j][i] == minL[i]) {
        n = true
      } else {
        n = false
        break
      }
    }

    if (n) {
      str+=minL[i]
    } else {
      return str
    }
  }

  return str
}

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

/*给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。*/
function isValid(s) {
  if (s.length % 2 !== 0) {
    return false
  }

  let stack = []
  let left1 = '{'
  let right1 = '}'
  let left2 = '('
  let right2 = ')'
  let left3 = '['
  let right3 = ']'

  for (let i = 0; i < s.length; i++) {
    if (!stack.length) {
      stack.push(s[i])
    } else {
      if (stack[stack.length - 1] === left1 && s[i] === right1 || stack[stack.length - 1] === left2 && s[i] === right2 || stack[stack.length - 1] === left3 && s[i] === right3) {
        stack.pop()
      } else {
        stack.push(s[i])
      }
    }
  }
  if (stack.length) {
    return false
  }
  return true
}

以上是关于Leetcode 51420:最长回文子串-最长公共前缀-有效括号的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-005-最长回文子串

Leetcode 5. 最长回文子串

leetcode-5 最长回文子串(动态规划)

leetcode 最长回文子串

[LeetCode] 最长回文子串

LeetCode:最长回文子串