關于返回字符串char中最長的連續(xù)重復字母,比如調用函數maxr("mmmiijjjjkkkkkkssptr") 返回"kkkkkk"
解題思路:
- 遍歷所有字符。
2.比較:
如果當前字符 與 上1個字符相同 ==> 計數器加1
如果當前字符 與 上1個字符不相同 ==> 統(tǒng)計計數器的數值 并與 之前最長的那個計數器比較
如果之前的大 忽略不計
如果之前的小 更新 最長計數器定硝,并且更新最長字符轻姿。
3.循環(huán)結束蚣旱,輸出 最長計數器 個 最長字符。
關于代碼
存放:定義一個變量存放最大計數值 maxCount,一個變量存放重復次數最多的字符maxChar实牡,并在最后用于循環(huán)輸出。
初始化:一般會賦初值轴合,這里把首位字符char[0]用于初始化
代碼
function maxr(char){
//var char="mmmiijjjjkkkkkkssptr";
var maxCount=0;
var maxChar="";
var str=char[0];//初始化
var count=1;
for(var i=1;i<char.length;i++){
if(str==char[i]){
count++;
}else{
if(maxCount<count){//比較
maxCount=count;
maxChar=str;
}
//更新計數和最長字符
count=1;
str=char[i];
}
}
for(var j=1;j<=maxCount;j++){
document.write(maxChar);
}
}
maxr("mmmiiijjjjjkkkkkkssptr")
再思考:
考慮到最長字符可能存在多個的情況
1.初始想法的拼接创坞,但在最后輸出遍歷時會交替出現,于是我把存放最長字符的變量定義了兩個 maxChar1受葛, maxChar2 初始化方法相同题涨。
2.當出現maxCount==count,給它一個分支总滩,存入 maxChar2中纲堵,最大計數器不更新。特別注意的是闰渔,當出現更新最大計數器時(即maxCount<count)席函,相應的要將第二個最大字符存放的變量重置(即var maxChar2=""),防止前面給它更新影響輸出結果冈涧。最后打印時茂附,maxChar1蝌以, maxChar2兩個都打印,當最長字符只有一個時何之,第二個打印空格(人為認為沒有打痈)。
3.考慮最長字符為3個甚至更多時溶推,同理即可徊件。
終極版代碼:
function maxr(char){
//var char="mmmiijjjjkkkkkkssptr";
var maxCount=0;
var maxChar1="";
var maxChar2="";//當最值出現兩個時使用
var str=char[0];//初始化
var count=1;
for(var i=1;i<char.length;i++){
if(str==char[i]){
count++;
}else{
if(maxCount<count){//比較
maxCount=count;
maxChar1=str;
maxChar2="";//更換重復字符時,maxChar2要重置(即使前面有兩個最值蒜危,后面出現最大值時也能處理)
}else if(maxCount==count){//考慮重復次數最多的有兩個字符的情況
maxChar2=str;
}
////更新計數和最長字符
count=1;
str=char[i];
}
}
for(var j=1;j<=maxCount;j++){
document.write(maxChar1);
}
document.write("<br/>");
for(var j=1;j<=maxCount;j++){
document.write(maxChar2);//最值只有一個時 打印空格虱痕,相當于不打印辐赞!
}
}
maxr("mmmiiijjjjjkkkkkkssptr")