1. 快慢指针
- demo 获取字符串中连续字符串的最大长度
//计算一个字符串,连续出现最大的次数
function twoPointerAlgorithm(str){
let i,j,max=1;
if(!str.length){
return 0;
}
for (j=0; j <= str.length; j++) {
if(str[j]!=str[i]){
if(j-i>max){
max=j-i;
}
i=j;
}
}
return max;
}
console.log(twoPointerAlgorithm('aaaaabccceddadeeeeeeeeeaaaaaaacd')) //9
- demo 获取字符串中连续字符串的最大长度以及当前字符串
function twoPointerAlgorithm(str){
let i,j,max=1,maxStr='';
if(!str.length){
return 0;
}
for (j=0; j <= str.length; j++) {
if(str[j]!=str[i]){
if(j-i>max){
max=j-i;
maxStr=str[i]
}
i=j;
}
}
return {max,maxStr};
}
const result=twoPointerAlgorithm('aaaaabcccffffffffffffffffffffffeddadeeeeeeeeeaaaaaaacd');
console.log('最大连续字符串: ',result.maxStr,' ,最大长度: ',result.max)
- 快慢指针实现斐波那契数列
/**
*
* @param {Number} n
*/
function fibonacci(n) {
if (n === 1 || n === 2) {
return 1;
}
var lastTwo = 1, lastOne = 1;
i = 3;
while (i < n) {
var temp = lastOne;
lastOne = lastOne + lastTwo;
lastTwo = temp;
i++;
}
return lastOne + lastTwo;
}
console.log('fibonacci', fibonacci(1))
console.log('fibonacci', fibonacci(2))
console.log('fibonacci', fibonacci(3))
console.log('fibonacci', fibonacci(5))
console.log('fibonacci', fibonacci(7))
console.log('fibonacci', fibonacci(8))
// 1 1 2 3 5 8 13 21
2. 对撞指针
一个字符串的除了有效字符(数字,字母)从开始到结束和从结束到开始是同一个字符串
var validExp = /[\da-zA-Z]/;
function isValidsStr(char) {
// return char >= '0' && char <= '9 || char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z';
return !validExp.test(char)
}
// 一个字符串的除了有效字符(数字,字母)从开始到结束和从结束到开始是同一个字符串
function isPalindrome(str) {
if (str.length === 0) {
return true;
}
let left = 0, right = str.length - 1;
while (left < right) {
var leftChar = str[left];
var rightChar = str[right];
if (isValidsStr(leftChar)) {
left++;
} else if (isValidsStr(rightChar)) {
right--;
} else if (leftChar != rightChar) {
return false;
} else {
left++;
right--;
}
}
return true;
}
const result = isPalindrome('a b,c*d,ef$e ,dc b,a');
console.log('是否是回文串', result ? '是' : '不是')
对撞指针实现数组翻转
/**
*
* @param {Array} arr
*/
function reverse(arr){
if(!arr.length){
return ;
}
let i=0,j=arr.length-1;
while(i<j){
swap(arr,i,j);
i++;
j--;
}
return arr;
}
/**
*
* @param {Array} arr
* @param {Number} i
* @param {Number} j
*/
function swap(arr,i,j){
let temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
const arrs=[1,4,3,6,8,9,0]
console.log('原数组',arrs);
console.log('排序后的数组',reverse(arrs));