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));
