从字符串中读取反复最多的那个字符及反复数量方法
有些从网上直接拷贝来的面试题总是有这样一道题:
“请写出一个从字符串中读取反复最多的那个字符及反复数量方法。”
大家会发现,网上流传的解决方式有如例一所看到的:
例一:
var strss ="adadfdfseffserfefsefseeffffftsdg"; //命名一个变量放置给出的字符串
var kkk = getMaxStrLength(strss);console.log(kkk);
function getMaxStrLength(str){
var maxRepetitionLength = 0;
var result = "";
while (str !== ''){
var oldStr = str;
var firstStr = str.substring(0,1);
str = str.replace(new RegExp(firstStr,"g"), "");
if( oldStr.length -str.length > maxRepetitionLength ){
maxRepetitionLength = oldStr.length -str.length;
result = firstStr + "=" + maxRepetitionLength;
}
}
return result;
}
不得不说,这样的通过取字符串首字来进行替成空格。并通过while循环来跌代然后比較去除首字空格前后变化的字符长度来从而得到该子字符在父子符中出现的次数,代码非常精减也非常巧妙。可是。个人感觉读起来不是那么好理解。
由此,受方例一的启示,如今总结出
例二:
var strs ="adadfdfseffserfefsefseeffffftsdg";
var kk = getMaxStrLength1(strs);
console.log(kk);
//通过for 循环把每个子符及父子符当參传进以下功能函数。然后通过记录參数maxRepetitionLength 不停地去刷新新的记录
function getMaxStrLength1(str){
var len = str.length,
result = '',
maxRepetitionLength = 0;
for(var i= 0; i<len; i++){
var subStr = str.charAt(i);
var countArr = countSubstring(str,subStr);
if(countArr[1]>maxRepetitionLength){
maxRepetitionLength = countArr[1];
result = subStr + "=" + maxRepetitionLength;
}
}
return result;
}
//功能拆分。读取给定子字符在父字符中出现的次数
function countSubstring(str,subString){
var count = 0;
var reg = new RegExp(subString,"g");
if(str.match(reg)== null){
count = 0;
}else {
count = str.match(reg).length;
}
return [subString, count];
}
上面这段代码尽管由两个函数组成,但个人感觉功能设置更合理,尽管代码量多了一些,但更易读懂。
posted on 2017-08-04 20:36 cynchanpin 阅读(197) 评论(0) 编辑 收藏 举报