1、判断回文字符串
回文字符串:如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是回文(palindrome)。
1⃣️递归的方法
function palindrome(str){
var lowerStr = str.toLowerCase().replace(/\W/g,"");
if(lowerStr.length==0) return true;
if(lowerStr[0]!=lowerStr[lowerStr.length-1]) return false;
return palindrome(lowerStr.slice(1,lowerStr.length-1));
}
2⃣️利用字符串翻转的方法;
function palindrome(str){
var lowerStr = str.toLowerCase().replace(/\W/g,"");
var reverseStr = lowerStr.split("").reverse().join("");
if(lowerStr==reverseStr) return true;
return false;
}
2、翻转字符串
1⃣️反向遍历字符串
function reverseString(str){
var result = "";
for(var i=0;i<str.length;i++){
result += str[i];
}
return result;
}
2⃣️转换为数组进行操作
function reverseString2(str){
return str.split("").reverse().join("");
}
3、统计字符串中出现次数最多的字符
1⃣️遍历字符串,计算每个字符串出现的次数,保存在数组中,找到数组中的最大值,则其在字符串中的位置即字符串中出现次数最多的字符在字符串中的位置
function findMaxDuplicateChar(str){
var len = str.length;
if(len<2) return str;
var arr = new Array(len);
arr.fill(0);
for(var i=0;i<len;i++){
var index = str.indexOf(str[i]);
arr[index]++;
}
var max = arr[0];
for(var i=1;i<len;i++){
max = arr[i]>max ? arr[i] : max;
}
// 可能存在多个字符串出现次数相同的情况
var result = [];
arr.map(function(item, index, arr){
if(item==max){
result.push(str[index]);
}
});
return result;
}
2⃣️使用对象保存每个字符串出现的次数,key为字符,value为字符出现的次数,最后遍历数组,找到出现最多次的字符和次数
function findMaxDuplicateChar2(str){
var len = str.length;
if(len<2) return str;
var obj = {};
for(var i=0;i<len;i++){
if(obj[str[i]]){
obj[str[i]]++;
}else {
obj[str[i]] = 1;
}
}
var maxKey = obj[str[0]];
// 可能存在多个字符串出现次数相同的情况
for(var key in obj){
if(obj[key]>obj[maxKey]){
delete obj[maxKey];
maxKey = key;
}else if(obj[key]<obj[maxKey]){
delete obj[key];
}
}
return obj;
}
4、数组去重
1⃣️遍历数组
function unique(arr){
var obj = {};
var result = [];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = true;
result.push(arr[i]);
}
}
return result;
}
2⃣️利用数组的filter方法
function unique(arr){
return arr.filter(function(item, index, arr){
return arr.indexOf(item)===index;
});
}
5、数组中的最大差值
1⃣️遍历数组,找到最大值和最小值,计算差值
function getMaxGap(arr){
var min = arr[0], max = arr[0];
for(var i=0;i<arr.length;i++){
min = arr[i]>min ? min : arr[i];
max = arr[i]>max ? arr[i] : max;
}
return max-min;
}
2⃣️利用Math.max和Math.min分别找到数组中的最大值和最小值,然后计算差值
function getMaxGap(arr){
var min = Math.min.apply(null, arr);
var max = Math.max.apply(null, arr);
return max-min;
}
6、不借助临时变量,进行两个整数的交换
function swap(a, b){
b = b-a;
a = a+b;
b = a-b;
}
7、实现类似getElementsByClassName的功能
不使用元素提供的getElementsByClassName和querySelectorAll等方法
function queryClassName(node, className){
var elements = [];
var nodes = node.getElementsByTagName("*");
for(var i=0;i<nodes.length;i++){
// 元素可能存在多个class
var classNames = nodes[i].className.split(" ");
var j = classNames.length;
while(j--){
if(classNames[j]==className){
elements.push(nodes[i]);
break;
}
}
}
return elements;
}