需要在字符串y中寻找:含有字符串x所有字符的最短字符串说明:
如果 y 中不存这样的最短字符串,则返回空字符串 ""。
如果 y 中存在这样的最短字符串,返回任意一个最短匹配。例子:
输入: y = "dhs5goe13j45ddsfoea", x = "esd"
输出: "dsfoe"
如果 y 中不存这样的最短字符串,则返回空字符串 ""。
如果 y 中存在这样的最短字符串,返回任意一个最短匹配。例子:
输入: y = "dhs5goe13j45ddsfoea", x = "esd"
输出: "dsfoe"
解决方案 »
- javascript 为什么bool等于true是,并没有alert(6),但是它又返回了false到cy()中
- 虚心请教
- 关于window.open()的问题,请教了
- [求助]input file 赋值问题
- 谁有《javascript网页特效实例大全》随书光盘的源代码啊????
- 如何用js动态的生成一个xml文件
- 在window中使用jquery.autocomplete 提示框被遮住的问题
- js判断浏览器是关闭还是刷新(实用完整版)
- 在线等待!请帮助!
- 这个程序为什么我在机本调用IE可以运行,一放到服务器就不行了,请高手指点!
- 怎么动态获取不同文件下的动态id
- 怎么把前端的项目放到服务器上???详细一点的步骤
var y = "dhs5goe13j45ddsfoea", x = "esd";
var str = "";
var arr = y.match(new RegExp("[^"+x+"]*["+x+"]","g"));
for (var i = 0; i < arr.length; i++) {
var r = arr[i].slice(-1);
var set = new Set();
set.add(r);
for (var j = i+1; j < arr.length; j++) {
r += arr[j];
set.add(arr[j].slice(-1));
if (set.size==x.length) {
if (str=="" || r.length<str.length)
str = r;
break;
}
}
}
alert(str);
var y = "a", x = "b";//抛错 Uncaught TypeError: Cannot read property 'length' of null
var y = "a", x = "a";
输出应该是a,而不是""
var y = "a", x = "a";
var str = "";
var arr = y.match(new RegExp("[^"+x+"]*["+x+"]","g"))||[];
for (var i = 0; i < arr.length; i++) {
var r = "";
var set = new Set();
for (var j = i; j < arr.length; j++) {
r += j==i? arr[j].slice(-1) : arr[j];
set.add(arr[j].slice(-1));
if (set.size==x.length) {
if (str=="" || r.length<str.length)
str = r;
break;
}
}
}
alert(str);
var y = "aa", x = "aa";
输出应该是aa,而不是""
var pos = {}, temp = [], min = { start: 0, end: 0, len: y.length };
//去重复字符,转对象
x.split('').forEach(function (s) { pos[s] = [] });
//获取各个匹配字符的位置
for (var k in pos) {
var index = y.indexOf(k, 0);
//如果某个字符不能匹配则提示并退出
if (index == -1) {
alert('不能匹配字符' + k);
return '';
}
while (index > -1) {
pos[k].push(index);
index = y.indexOf(k, index + 1);
}
}
//生成组合
for (var k in pos) {
if (temp.length == 0) {
pos[k].forEach(function (n) { temp.push([n]); });
} else {
var temp2 = [];
temp.forEach(function (arr) {
pos[k].forEach(function (n) {
temp2.push(arr.concat([n]));
});
});
temp = temp2;
}
}
//计算最小长度字符串
temp.forEach(function (arr) {
arr.sort(function (a, b) { return a - b });
var _ = { start: arr[0], end: arr[arr.length - 1], len: arr[arr.length - 1] - arr[0] };
if (_.len < min.len) {
min = _;
}
});
return y.substring(min.start, min.end + 1);
}
var result = test('dhs5goe13j45ddsfoea', 'esdssddddeee');
alert(result);
var y = "a", x = "aa";
输出应该是"",而不是"a"
var y = "aa", x = "aa";
var str = "";
var rx = x.replace(/([\\\/\(\)\[\]\{\}\"\'\?\+\-\*\|\^\$\.])/g,"\\$1");
var arr = y.match(new RegExp(".*?["+rx+"]","g"))||[];
for (var i = 0; i < arr.length; i++) {
var r = "";
var t = x;
for (var j = i; j < arr.length; j++) {
r += j==i? arr[j].slice(-1) : arr[j];
t = t.replace(arr[j].slice(-1),"");
if (t.length==0) {
if (str=="" || r.length<str.length)
str = r;
break;
}
}
}
alert(str);
做对了,就是性能不太理想,下面例子如果能控制在800毫秒间,就是完美var y = "obzcopzocynyrsgsarijyxnkpnukkrvzuwdjldxndmnvevpgmxrmvfwkutwekrffnloyqnntbdohyfqndhzyoykiripdzwiojyoznbtogjyfpouuxvumtewmmnqnkadvzrvouqfbbdiqremqzgevkbhyoznacqwbhtrcjwfkzpdstpjswnpiqxjhywjanhdwavajrhwtwzlrqwmombxcaijzevbtcfsdcuovckoalcseaesmhrrizcjgxkbartdtotpsefsrjmvksqyahpijsrppdqpvmuocofuunonybjivbjviyftsyiicbzxnwnrmvlgkzticetyfcvqcbjvbufdxgcmesdqnowzpshuwcseenwjqhgsdlxatamysrohfnixfprdsljyyfhrnnjsagtuihuczilgvtfcjwgdhpbixlzmakebszxbhrdibpoxiwztshwczamwnninzmqrmpsviydkptjzpktksrortapgpxwojofxeasoyvyprjoguhqobehugwdvtzlenrcttuitsiijswpogicjolfxhiscjggzzissfcnxnvgftxvbfzkukqrtalvktdjsodmtgzqtuyaqvvrbuexgwqzwduixzrpnvegddyyywaquxjxrnuzlmyipuqotkghfkpknqinoidifnfyczzonxydtqroazxhjnrxfbmtlqcsfhshjrxwqvblovaouxwempdrrplefnxmwrwfjtebrfnfanvvmtbzjesctdgbsfnpxlwihalyiafincfcwgdfkvhebphtxukwgjgplrntsuchyjjuqozakiglangxkttsczhnswjksnuqwflmumpexxrznzwxurrysaokwxxqkrggytvsgkyfjrewrcvntomnoazmzycjrjrqemimyhriyxgrzcfuqtjhvjtuhwfzhwpljzajitrhryaqchnuawbxhxrpvyqcvhpggrpplhychyulijhkglinibedauhvdydkqszdbzfkzbvhldstocgydnbfjkcnkfxcyyfbzmmyojgzmasccaahpdnzproaxnexnkamwmkmwslksfpwirexxtymkmojztgmfhydvlqtddewjvsrmyqjrpycbmndhupmdqqabiuelacuvxnhxgtpvrtwfgzpcrbhhtikbcqpctlxszgpfbgcsbaaiapmtsucocmpecgixshrrnhyrpalralbccnxvjzjllarqhznzghswqsnfuyywmzbopyjyauknxddgdthlabjqtwxpxwljvoxkpjjpfvccyikbbrpdsyvlxscuoofkecwtnfkvcnzbxkeabtdusyhrqklhaqreupakxkfzxgawqfwsaboszvlshwzhosojjotgyagygguzntrouhiweuomqptfjjqsxlbylhwtpssdlltgubczxslqjgxuqnmpynnlwjgmebrpokxjnbiltvbebyytnnjlcwyzignmhedwqbfdepqakrelrdfesqrumptwwgifmmbepiktxavhuavlfaqxqhreznbvvlakzeoomykkzftthoemqwliednfsqcnbexbimrvkdhllcesrlhhjsspvfupxwdybablotibypmjutclgjurbmhztboqatrdwsomnxnmocvixxvfiqwmednahdqhxjkvcyhpxxdmzzuyyqdjibvmfkmonfxmohhshpkhmntnoplphqyprveyfsmsxjfosmicdsjrieeytpnbhlsziwxnpmgoxneqbnufhfwrjbqcsdfarybzwaplmxckkgclvwqdbpumsmqkswmjwnkuqbicykoisqwoootrdpdvcuiuswfqmrkctsgrevcxnyncmivsxbpbxzxpwchiwtkroqisnmrbmefbmatmdknaklpgpyqlsccgunaibsloyqpnsibwuowebomrmcegejozypjzjunjmeygozcjqbnrpakdermjcckartbcppmbtkhkmmtcngteigjnxxyzaibtdcwutkvpwezisskfaeljmxyjwykwglqlnofhycwuivdbnpintuyhtyqpwaoelgpbuwiuyeqhbvkqlsfgmeoheexbhnhutxvnvfjwlzfmvpcghiowocdsjcvqrdmkcizxnivbianfpsnzabxqecinhgfyjrjlbikrrgsbgfgyxtzzwwpayapfgueroncpxogouyrdgzdfucfrywtywjeefkvtzxlwmrniselyeodysirqflpduvibfdvedgcrzpzrunpadvawfsmmddqzaaahfxlifobffbyzqqbtlcpquedzjvykvarayfldvmkapjcfzfbmhscdwhciecsbdledspgpdtsteuafzbrjuvmsfrajtulwirzagiqjdiehefmfifocadxfuxrpsemavncdxuoaetjkavqicgndjkkfhbvbhjdcygfwcwyhpirrfjziqonbyxhibelinpllxsjzoiifscwzlyjdmwhnuovvugfhvquuleuzmehggdfubpzolgbhwyeqekzccuypaspozwuhbzbdqdtejuniuuyagackubauvriwneeqfhtwkocuipcelcfrcjcymcuktegiikyosumeioatfcxrheklookaqekljtvtdwhxsteajevpjviqzudnjnqbucnfvkybggaybebljwcstmktgnipdyrxbgewqczzkaxmeazpzbjsntltjwlmuclxirwytvxgvxscztryubtjweehapvxrguzzsatozzjytnamfyiitreyxmanhzeqwgpoikcjlokebksgkaqetverjegqgkicsyqcktmwjwakivtsxjwrgakphqincqrxqhzbcnxljzwturmsaklhnvyungjrxaonjqomdnxpnvihmwzphkyuhwqwdboabepmwgyatyrgtboiypxfavbjtrgwswyvcqhzwibpisydtmltbkydhznbsvxktyfxopwkxzbftzknnwipghuoijrbgqnzovxckvojvsqqraffwowfvqvfcmiicwitrhxdeombgesxexedlakitfovtydxunqnwqqdeeekiwjnwoshqcsljiicgobbbuqakjdonjawgjlezdnqhfdqnmsuavxdpnfzwipmspiabveaarshzwxmirgkmfncvtdrdvfxkpxlkdokxgtwcskmjryyymcthfnkasinihaunohkxaibtsqelockaefjmsuolebtnepauwmrxutspjwaxbmahsjtkfkxlnszribmeofbkyvbjscjtqjakuwvcgunvnonvqbbggfshauqsyznokqbhowjusypfnecffenojfvlblgzntqzlrgzprvhqnpfrrkzxznieiuivajivzijsqijigtatifmbplzqahuidegfoobpymkputzamzvweiyvvzlwihgmmmrcburbgbsdxrfjsbiylitghgcpqjbevvgypxcybubyoijijrhuzcdijfybqbfowlookqmlnplbxvjjosfqviygqyhgamuwzjklbyzopkrnhbywtfoqomweldmlrhjqswctubiknzzvcztyehouvnyiqnvkufaobehxhrjvtisxjlxoumipzjarwvbsaegdkpbsjmpevjbewzuqnfhoohhmdjgfpmjzdmtmykqvtucptwfidpwtwffzolffzqfdearclkyeecuzabjeqhxpmfodsvisnpxrqowdawheydfyhoexvcmihdlzavtqlshdhdgjzpozvvackebhgqppvcrvymljfvooauxcjnbejdivikcoaugxwzsulgfqdtefpehbrlhaoqxwcancuvbqutnfbuygoemditeagmcveatgaikwflozgdhkyfqmjcruyyuemwbqwxyyfiwnvlmbovlmccaoguieu"
var x = "cjgamyzjwxrgwedhsexosmswogckohesskteksqgrjonnrwhywxqkqmywqjlxnfrayykqotkzhxmbwvzstrcjfchvluvbaobymlrcgbbqaprwlsqglsrqvynitklvzmvlamqipryqjpmwhdcsxtkutyfoiqljfhxftnnjgmbpdplnuphuksoestuckgopnlwiyltezuwdmhsgzzajtrpnkkswsglhrjprxlvwftbtdtacvclotdcepuahcootzfkwqhtydwrgqrilwvbpadvpzwybmowluikmsfkvbebrxletigjjlealczoqnnejvowptikumnokysfjyoskvsxztnqhcwsamopfzablnrxokdxktrwqjvqfjimneenqvdxufahsshiemfofwlyiionrybfchuucxtyctixlpfrbngiltgtbwivujcyrwutwnuajcxwtfowuuefpnzqljnitpgkobfkqzkzdkwwpksjgzqvoplbzzjuqqgetlojnblslhpatjlzkbuathcuilqzdwfyhwkwxvpicgkxrxweaqevziriwhjzdqanmkljfatjifgaccefukavvsfrbqshhswtchfjkausgaukeapanswimbznstubmswqadckewemzbwdbogogcysfxhzreafwxxwczigwpuvqtathgkpkijqiqrzwugtr"
var timer1 = Date.now()
var str = "";
var rx = x.replace(/([\\\/\(\)\[\]\{\}\"\'\?\+\-\*\|\^\$\.])/g,"\\$1");
var arr = y.match(new RegExp(".*?["+rx+"]","g"))||[];
for (var i = 0; i < arr.length; i++) {
var r = "";
var t = x;
for (var j = i; j < arr.length; j++) {
r += j==i? arr[j].slice(-1) : arr[j];
t = t.replace(arr[j].slice(-1),"");
if (t.length==0) {
if (str=="" || r.length<str.length)
str = r;
break;
}
}
}
console.log(str)
var timeDiff = Date.now() - timer1
console.log(timeDiff)
<script>
console.log(new Date().getMilliseconds())
let x = 'esd', //可写多个 个数越多执行越慢
xArr = x.split('');
xsArr = permute([],xArr);
console.log(xsArr)
let matchs = [],
str = 'dhs5goe13j45ddsfoea';
xsArr.forEach(item => {
let regexStr = createRegex(item,x.length);
let regex = eval(regexStr),
match = str.match(regex);
console.log(regexStr)
matchs = matchs.concat(match)
});
matchs = matchs.filter(x=>{
console.log(x)
return x!=null && x.length >0
})
matchs = matchs.sort((a,b)=>a.length-b.length)
console.log(matchs)
console.log(matchs[0])
console.log(new Date().getMilliseconds())/**
* 根据提供的关键字符构建regex表达式
*/
function createRegex(item,len){
let regex = '/'
for(let i = 0;i<len -1;i++){
regex +=`${item[i]}[^${item[i]}]*?`
}
regex += `${item[len-1]}/g`;
return regex;
}/**
* 对提供的关键字符排序组合(网上找的)
*
*/
function permute(temArr,testArr){
var permuteArr=[];
var arr = testArr;
function innerPermute(temArr){
for(var i=0,len=arr.length; i<len; i++) {
if(temArr.length == len - 1) {
if(temArr.indexOf(arr[i]) < 0) {
permuteArr.push(temArr.concat(arr[i]));
}
continue;
}
if(temArr.indexOf(arr[i]) < 0) {
innerPermute(temArr.concat(arr[i]));
}
}
}
innerPermute(temArr);
return permuteArr;
}
</script>
var y = "a", x = "aa";
输出应该是"",而不是undefined
https://blog.csdn.net/a807719447/article/details/102902924
抱歉,没接触过java,无法验证
抱歉,没接触过java,无法验证
回头给你贴个js版本吧 还有 那个 x="aa" y=“a”这个输出 a 才是正确得,符合题题意得。
抱歉,没接触过java,无法验证
回头给你贴个js版本吧 还有 那个 x="aa" y=“a”这个输出 a 才是正确得,符合题题意得。
他这个x="aa"的意思是匹配的子串中要包含两个a
抱歉,没接触过java,无法验证
回头给你贴个js版本吧 还有 那个 x="aa" y=“a”这个输出 a 才是正确得,符合题题意得。
他这个x="aa"的意思是匹配的子串中要包含两个a这没道理,如果题目有明确要求需要包含两个a那么需要,如果没有明确要求,那我包含了就可以了,一般这种题目如果有特别要求,会明确出来的
抱歉,没接触过java,无法验证
回头给你贴个js版本吧 还有 那个 x="aa" y=“a”这个输出 a 才是正确得,符合题题意得。
他这个x="aa"的意思是匹配的子串中要包含两个a举个例子数组升序排列如果包含两个1那,按这么理解题意我是不是需要理解成,下标小的排前面