递归:
// 声明字符串
var strings = 'sdfdasmfadsfjkldasfjdaisfjiodasfjkdsafzxcvozjxalk'
// 定义一个存放返回最终结果的对象
var result = {name:'', length:0}
var str, length; // 每次递归时,用到的变量,当前字符和重复数量
(function(strings){
if(!strings){ // 7. 如果字符串为空,return
return
}
str = strings[0]; // 1. 取字符串第一个字符
length = strings.length; // 2. 取当前字符串的总长度,默认为原始长度
strings = strings.replace(new RegExp(str,'g'), '') // 3. 把字符串中所有匹配的第一个字符替换为空
length = length - strings.length // 4. 取到第一个字符串重复数量
if(length > result.length){ // 5. 如果 当前字符重复数量 大于 之前取到的最大重复数量,设置result
result.name = str;
result.length = length
}
arguments.callee(strings) // 6. 递归操作 关于arguments.callee()
})(strings)
console.log(result) // {name: "s", length: 7}
循环:
function getRepeatObj(str){
var obj = {name: '', len:0}
var arr = str.split('').sort()for(var i in arr){
var curlen = arr.lastIndexOf(arr[i]) - arr.indexOf(arr[i]) + 1
if(curlen > obj.len){
obj.len = curlen
obj.name = arr[i]
}
}return obj
}getRepeatObj('abcdb') // {name:'b', len: 2}