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)// 前面补0x = x.padStart(maxLength, 0)y = y.padStart(maxLength, 0)let count = 0for (let i = 0; i < maxLength; i++) {if (x[i] !== y[i]) count++}return count};
// 左移运算const hammingDistance = (x, y) => {let count = 0, flag = 1while (flag) {const xBit = x & flag, yBit = y & flagif ((xBit || yBit) && xBit !== yBit) count++flag = flag << 1}return count}// 异或运算const hammingDistance = (x, y) => {let xOry = x^ylet count = 0while (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.lengthif (len <= 1) return lenlet left = 0let right = 1let max = 0let tempwhile (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寻找字符出现的第一个位置。
