87,922
社区成员
发帖
与我相关
我的任务
分享
let y = "dhs5goe13j45ddsfoea"
let x = "esd"
let matches = {};
for (let i of x) {
let rex = new RegExp(i, "g")
let match;
while (match = rex.exec(y)) {
matches[match.index] = i
}
}
let a = {}
let o = {}
let min = 999999999
let minstr
for (let i in matches) {
a[i] = []
o[i] = []
for (let b in a) {
if (a[b].length < x.length) {
if (a[b].indexOf(matches[i]) == -1) {
a[b].push(matches[i])
o[b].push(i)
}
}
if (a[b].length == x.length) {
if (o[b][x.length - 1] - o[b][0] < min) {
min = o[b][x.length - 1] - o[b][0]
minstr = y.substr(o[b][0], min + 1) + ",位于" + o[b][0] + "-" + o[b][x.length - 1]
}
}
}
}
alert(minstr)
y = 'dhs5goe13j45ddsfoea'
x = 'esd'
seen = set(x)
for jj in range(len(y)):
seen.discard(y[jj])
if len(seen) == 0:
break
else:
print("no answer")
i = 0
count = {}
ans = y
for j in range(len(y)):
count.setdefault(y[j], 0)
count[y[j]] += 1
while i <= j and (count[y[i]] > 1 or y[i] not in x):
count[y[i]] -= 1
i += 1
if j >= jj and j - i < len(ans):
ans = y[i:j + 1]
print(ans)
处理了越界情况y = 'dhs5goe13j45ddsfoea'
x = 'esd'
seen = set(x)
for jj in range(len(y)):
seen.discard(y[jj])
if len(seen) == 0:
break
i = 0
count = {}
ans = y
for j in range(len(y)):
count.setdefault(y[j], 0)
count[y[j]] += 1
while count[y[i]] > 1 or y[i] not in x:
count[y[i]] -= 1
i += 1
if j >= jj and j - i < len(ans):
ans = y[i:j + 1]
print(ans)
O(n) 复杂度
17楼的样例可以毫秒级出解
<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 = "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)
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);