自己的解法
思路:利用count
计数不相等字符的对数,超过两对返回false
,利用a
b
记录两对不相等字符的下标。
var areAlmostEqual = function(s1, s2) {
let a = 0, b = 0, count = 0;
for(let i = 0; i < s1.length; i++) {
if(s1[i] !== s2[i] && count == 0) {
if(i == s1.length - 1) {
return false;
}
a = i;
count++;
}else if(s1[i] !== s2[i] && count == 1){
b = i;
count++;
if(s2[a] !== s1[b] || s2[b] !== s1[a]) {
return false;
}
}else if(s1[i] !== s2[i] && count >1) {
return false;
}
if(i == s1.length - 1 && count == 1) {
return false;
}
}
return true;
};
官方解法
思路:用一个数组存放不相等字符的索引,数组长度不为2就返回false
,否则比较s1[diff[0]]
与s2[diff[1]]
、s1[diff[1]]
与s2[diff[0]]
字符是否相等。
var areAlmostEqual = function(s1, s2) {
const n = s1.length;
const diff = [];
for (let i = 0; i < n; ++i) {
if (s1[i] !== s2[i]) {
if (diff.length >= 2) {
return false;
}
diff.push(i);
}
}
if (diff.length === 0) {
return true;
}
if (diff.length !== 2) {
return false;
}
return s1[diff[0]] === s2[diff[1]] && s1[diff[1]] === s2[diff[0]];
};
41. 缺失的第一个正数-困难
注:当将符合数组范围内的数据放入到数组位置时,不能直接[nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]]
。要利用swap
函数
function swap(nums, i ,j) {
let temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
var firstMissingPositive = function(nums) {
for(let i = 0; i < nums.length; i++) {
while(nums[i] > 0 && nums[i] < nums.length && nums[i] !== nums[nums[i] - 1]) {
// [nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]];
swap(nums, nums[i] - 1, i);
}
}
for(let i = 0; i < nums.length; i++) {
if(nums[i] !== i + 1) {
return i + 1;
}
}
return nums.length + 1;
};
268. 丢失的数字-简单
与上一题一样的思路。
function swap(nums, i ,j) {
let temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
var missingNumber = function(nums) {
for(let i = 0; i < nums.length; i++) {
while(nums[i] >= 0 && nums[i] < nums.length && nums[i] !== nums[nums[i]]) {
swap(nums, nums[i], i);
}
}
for(let i = 0; i < nums.length; i++) {
if(nums[i] !== i) {
return i;
}
}
return nums.length;
};
448. 找到所有数组中消失的数字-简单
Set解法
var findDisappearedNumbers = function(nums) {
const len=nums.length;
const sortNum=Array.from(new Set(nums.sort((a,b)=>a-b)));
const ans=[];
let n=0;
for(let i=0;i<len;i++){
n+=1;
if(sortNum.indexOf(n)<0){
ans.push(n);
}
}
return ans;
};
与上一道题相同的思路
function swap(nums, i ,j) {
let temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
var findDisappearedNumbers = function(nums) {
for(let i = 0; i < nums.length; i++) {
while(nums[i] !== nums[nums[i] - 1]) {
swap(nums, nums[i] - 1, i);
}
}
const ans = [];
for(let i = 0; i < nums.length; i++) {
if(nums[i] !== i + 1) {
ans.push(i+1);
}
}
return ans;
};