题目一、
在一个无序数组中,寻找连续两个及两个以上的相同元素的个数
var arr = [1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,10, 22, 32, 4, 5,4, 5, 5, 4, 4, 4, 5, 5, 5, 6, 9, 8, 8, 2];
//常规思路 解法一
var cont = 0,c;
// 找相邻等于它的
function getx(i,arr){
if (arr[i] == arr[i + 1]) {
c++;
return getx(i+1,arr);
}else{
return c;
}
}
for (let i = 0; i < arr.length; i++) {
arr[i]==arr[i+1] && cont++;
c=0,getx(i,arr),i+=c;
}
console.log('相同的个数是:',cont);
//取后相邻临界来判断 解法二
var num = 1;
var arr1 = [];
for (let [index, elem] of arr.entries()) {
if (arr[index + 1] == elem && elem != arr[index + 2]) {
arr1.push(elem);
}
}
题目二、
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
let str = "abcadefcsd";
console.log('处理串:',str)
/**
* @param {string} s
* @return {number}
*/
// 解释版
var lengthOfLongestSubstring = function(s) {
for (let i =num=j=t= 0; i < s.length; i++) {
t = s.slice(j, i).indexOf(s[i]);
console.log('游标',j,i,'当前值',s[i],'子串',s.slice(j, i),'是否存在',t,'当前值',num);
if (t == -1) {
num = Math.max(num, i - j + 1)
} else {
j = j + t + 1
}
}
return num;
};
// 精简版
var lengthOfLongestSubstring = function(s) {
for (let i = num = j = t = 0; i < s.length; i++) {
t = s.slice(j, i).indexOf(s[i]),
t == -1 ? num = Math.max(num, i - j + 1):j = j + t + 1
}
return num
};
console.log('输出值',lengthOfLongestSubstring(str));