Leetcode 461.汉明距离
题目:461.汉明距离
初始思路
今天没安排刷题,自己找几个hot 100写写
先转成二进制,前面补0,最后每位比较
代码
var hammingDistance = function (x, y) {
x = x.toString(2)
y = y.toString(2)
let maxLength = Math.max(x.length, y.length)
// 前面补0
x = x.padStart(maxLength, 0)
y = y.padStart(maxLength, 0)
let count = 0
for (let i = 0; i < maxLength; i++) {
if (x[i] !== y[i]) count++
}
return count
};
// 左移运算
const hammingDistance = (x, y) => {
let count = 0, flag = 1
while (flag) {
const xBit = x & flag, yBit = y & flag
if ((xBit || yBit) && xBit !== yBit) count++
flag = flag << 1
}
return count
}
// 异或运算
const hammingDistance = (x, y) => {
let xOry = x^y
let count = 0
while (xOry) {
count++
xOry = (xOry - 1) & xOry
}
return count
}
感想
- toString()原来可以转化进制。
- 通过左移运算获取每一位的值,进行比较,如果x & flag或y & flag有值,且两者不相等,count加1。
- 根据异或运算的规则,x^y的值里面的1代表不同位,有多少个1即有多少个不同位。只要求出异或值中1的个数即可。
Leetcode 3.无重复字符的最长子串
题目:3.无重复字符的最长子串
初始思路
代码
var lengthOfLongestSubstring = function (s) {
const len = s.length
if (len <= 1) return len
let left = 0
let right = 1
let max = 0
let temp
while (right < len) {
// 截取这段字符串
temp = str.slice(left, right)
if (temp.indexOf(str.charAt(right)) > -1) {
// 如果right指针所在的字符在字符串中出现过,左指针移动
left++
continue
} else {
// 如果没出现过,右指针继续移动寻找
right++
}
if (max < right - left) {
max = right - left
}
}
return max
};
感想
- 使用slice截取字符串,使用charAt寻找字符出现的第一个位置。