纯js获取字符串中最长无重复子串
昨天同事提出一个问题:获取一个字符串得最长子字符串,例如:“abcd”其子字符串是"abcd","abbcdd"其子字符串是"ab"/"bc"/"cd","bbbb"其子字符串是"b";
于是在调页面得时候忍不住用纯js写了一版。
代码如下:
function re(dataString){//递归调用,获取最长子串
if(dataString.length){
for(var i=0;i<dataString.length;i++){
var currentString=dataString.substring(i,i+1);//当前一个字符
var lastString=dataString.substring(i+1,dataString.length);//当前字符得后续字符
var p=lastString.indexOf(currentString);//判断后续字符是否存在是否
if(p==-1){
return currentString+re(lastString);//返回无重复字符
}else{
return re(dataString.substring(i,p+1));//获取无重复字符得后续子串
}
};
}else{
return "";
}
};
var dataString="abda";//数据串
var aa=[dataString.length];//存数据
for(var i=0;i<dataString.length;i++){
var data=re(dataString.substring(i,dataString.length));
aa[data.length]=data;//将每次返回得字符串存在数组中
};
var showString;//展示最后最长得子串
for(var i=dataString.length;i>=0;i--){
if(aa[i]!=null){
showString=aa[i];//得到最大字符串返回
break;
}
}
showString;
效果图: