Linjiayu6 / LeetCode

[2019+] CS Fundamentals: Algorithms and Data structures
0 stars 0 forks source link

[字符串] #12

Open Linjiayu6 opened 4 years ago

Linjiayu6 commented 4 years ago

1 - 14. 最长公共前缀

前缀相同即可

//  两两比较
var twoMatch = function (str1, str2) {
    if (!str1 || !str2) return ''
    var i = 0
    while (i < str1.length && i < str2.length) {
        if (str1[i] !== str2[i]) break
        i += 1
    }
    return i === 0 ? '' : str1.slice(0, i)
}

var longestCommonPrefix = function(strs) {
    if (strs.length === 0) return ''
    if (strs.length === 1) return strs[0]
    var prev = strs[0]
    for (let i = 1; i < strs.length; i++) {
        prev = twoMatch(prev, strs[i])
        if (prev === '') return ''
    }
    return prev
};
Linjiayu6 commented 4 years ago

2 - 回文判断

类似 https://github.com/Linjiayu6/FE-Notes/issues/11#issuecomment-657017143 字符串判断是否回文

api使用

function fn(str) {
    if (str.length === 0 || str.length === 1) return true;
    return str.split('').reverse().join('') === str;
}

不使用api

function fn(str) {
    if (str.length === 0 || str.length === 1) return true;
    var i = 0, j = str.length - 1
    while (i < j) {
        if (str[i] !== str[j]) return false
        i += 1
        j -= 1
    }
    return true
}
Linjiayu6 commented 4 years ago

3 - 3. 无重复字符的最长子串

Linjiayu6 commented 4 years ago

4 - 415. 字符串相加

/**
 * 从尾部开始指针计算
 * [192] [19]
 * i = num1.length - 1, j = num2.length - 1
 * 循环条件 i >= 0 || j >= 0 只有当都小于0, 才结束
 * x = 2, y = 9, count = 0
 * => result = 1 count 1
 * x = 9, y = 1, count = 1
 * => result = 11, count = 1
 * x = 1, y = 0(单独补0), count = 1
 * => result = 211
 * 
 * 最后如果有count还是1的情况, 再最前面补上
 */
var addStrings = function(num1, num2) {
  var i = num1.length - 1, j = num2.length - 1
  var result = ''
  var count = 0
  while (i >= 0 || j >= 0) {
    var x = i >= 0 ? Number(num1[i]) : 0
    var y = j >= 0 ? Number(num2[j]) : 0
    var val = x + y + count
    if (val >= 10) {
      val = val - 10
      result = val.toString() + result
      count = 1
    } else {
      result = val.toString() + result
      count = 0
    }
    i -= 1
    j -= 1
  }
  return count === 1 ? '1' + result : result
};