最长回文串

image.png

  1. var longestPalindrome = function(s) {
  2. const set_ = new Set()
  3. let res = 0
  4. for (let i = 0; i < s.length; i ++) {
  5. if (set_.has(s[i])) {
  6. res += 2
  7. set_.delete(s[i])
  8. } else {
  9. set_.add(s[i])
  10. }
  11. }
  12. if (set_.size >= 1) {
  13. res ++
  14. }
  15. return res
  16. };

最长回文子串

var longestPalindrome = function(s) {
let len=s.length
let dp=[]
let ans=''
for(let i=0;i<len;i++){
    dp[i]=new Array(len).fill(true)
}
for(let length=1;length<=len;length++){
    for(let left=0;left<len;left++){
        let right=left+length-1
        if(right>=len) 
            break
        if(right-left<3)
            dp[left][right]=(s[left]===s[right])
        else
            dp[left][right]=(dp[left+1][right-1])&&(s[left]===s[right])

        if(dp[left][right]&&length>ans.length){
          ans=s.slice(left,right+1)
        }
    }
}
    return ans
};

无重复字符的最长子串

var lengthOfLongestSubstring = function(s) {
    let map=new Set()
    let fast=0;
    let ans=0
    let n=s.length
    for(let i=0;i<n;i++){
        if(i!==0){
            map.delete(s[i-1])
        }
       while(fast<n&&!map.has(s[fast]))
       {
           map.add(s[fast])
           fast++
       }
       ans=Math.max(ans,fast-i)
    }
    return ans
};

大数相加

function solve( s ,  t ) {
    // write code here
    let n=Math.max(s.length,t.length)
    s=s.padStart(n,0)
    t=t.padStart(n,0)
    let res=[]
    let rest=0
    for(let i=n-1;i>=0;i--){
        let subres=parseInt(s[i])+parseInt(t[i])+rest
        if(subres>=10&&i!==0){
            subres=subres-10
            rest=1
        }
        else{
            rest=0
        }
        res.unshift(subres)
    }
    return res.join('')
}


//别人的答案
function solve( s ,  t ) {
    // write code here
    var n = Math.max(s.length,t.length)
    //前面补0使得俩数长度一样
    s = s.padStart(n,0)
    t= t.padStart(n,0)

    var c = 0
    // 进位
    // 结果
    var res = ''
    for(let i = n-1;i>=0;i--){
        let tp = parseInt(s[i])  +parseInt(t[i])  + c
        // 判断进位
        c = Math.floor(tp/10)
        // 保留余数
        tp = tp%10
        // 注意:每一步算出来的结果需要放在右边上。
        res = tp + res
    }
    if (c === 1){
        res = '1' + res
    }
    return res

}

比较版本号

var compareVersion = function(version1, version2) {
  const v1 = version1.split('.');
  const v2 = version2.split('.');
  for (let i = 0; i < Math.max(v1.length,v2.length); ++i) {
    let x = 0, y = 0;
    if (i < v1.length) {
      x = parseInt(v1[i]);
    }
    if (i < v2.length) {
      y = parseInt(v2[i]);
    }
    if (x > y) {
      return 1;
    }
    if (x < y) {
      return -1;
    }
  }
  return 0;
};

字符串变形

function trans(s, n){
 let s1=s.split(' ').map((item)=>{
     let word=item.split('')
      for(let i=0;i<word.length;i++){
        if(word[i]!==' '&&word[i]>='a'&&word[i]<='z')
            word[i]=word[i].toUpperCase()
        else if(word[i]!==' '&&word[i]>='A'&&word[i]<='Z')
            word[i]=word[i].toLowerCase()
    }
   return word.join('')
 })
    return s1.reverse().join(' ')
}

module.exports = {
    trans : trans
}

最长公共前缀

var longestCommonPrefix = function(strs) {
    let ans=strs[0]
    for(let i=1;i<strs.length;i++){
        let now=strs[i]
        let j=0
        for(;j<Math.min(ans.length,now.length);j++){
            if(now[j]!==ans[j]){
                break;
            }
        }
        ans=ans.substring(0,j)
    }
    return ans
};

字符串轮转

var isFlipedString = function(s1, s2) {
    return s1.length===s2.length &&(s1+s1).indexOf(s2)!==-1
};