以前看到過這樣的筆試題,用傳統方法解出來過.閑來無事又想了一想,突然有了靈感.思路如下
1.用數組的sort方法對字符串進行排序,讓相同字母都到一起去
2.用正則表達式來匹配兩個相鄰的不同字符,中間加上逗號
3.以逗號為界把第二步得到的字符串打散成數組
4.按字符串長度排序該數組,得到的第一個元素就是要的答案
代碼如下(非常感謝boozhidao的提醒,已經修正正則表達式)
String.Count=function(str){ var ret=str.split("") .sort() .join("") .replace(/((.)2*)/g,"$1,") .split(",") .sort(function(a,b){return b.length-a.length}); return [ret[0][0],ret[0].length];}var s="&(&$#(JFLSDJFOIWEfdjsklfewosd2378907345asdsdwsdqs";alert(String.Count(s));
返回值是['s',6].
有個問題就是,那個正則表達式寫得不夠完善,在字符串的最后還加上了逗號,到時ret數組的最后一個元素是空字符串.大家如果有好的解決辦法,歡迎交流.
轉自:http://www.cnblogs.com/kenandalda/