Find the index of a given permutation in the sorted list of the permutations of a given string

后端 未结 6 625
轻奢々
轻奢々 2020-11-29 04:29

We\'re given a string and a permutation of the string.

For example, an input string sandeep and a permutation psdenae.

Find the pos

6条回答
  •  醉梦人生
    2020-11-29 05:18

    I tried to implement this in js. It works for string that have no repeated letters but I get a wrong count otherwise. Here is my code:

    function x(str) {
    var sOrdinata = str.split('').sort()
    console.log('sOrdinata = '+ sOrdinata)
    var str = str.split('')
    console.log('str = '+str)
    console.log('\n')
    var pos = 1;
    
    for(var j in str){
    //console.log(j)
    
    for(var i in sOrdinata){
    if(sOrdinata[i]==str[j]){
      console.log('found, position: '+ i)
      sOrdinata.splice(i,1)
      console.log('Nuovo sOrdinata = '+sOrdinata)
      console.log('\n')
      break;
    }
    else{
      //calculate number of permutations
      console.log('valore di j: '+j)
    
      //console.log('lunghezza stringa da permutare: '+str.slice(~~j+1).length);
      if(str.slice(j).length >1 ){sub = str.slice(~~j+1)}else {sub = str.slice(j)}
      console.log('substring to be used for permutation: '+ sub)
    
      prep = nrepC(sub.join(''))
      console.log('prep = '+prep)
    
      num = factorial(sub.length)
      console.log('num = '+num)
    
      den = denom(prep)
      console.log('den = '+ den)
    
      pos += num/den
      console.log(num/den)
      console.log('\n')
     }
     }
    }
    console.log(pos)
    return pos
    }
    
    
    
    /* ------------ functions used by main --------------- */ 
    
    function nrepC(str){
    var obj={}
    var repeats=[]
    var res= [];
    
    for(x = 0, length = str.length; x < length; x++) {
    var l = str.charAt(x)
    obj[l] = (isNaN(obj[l]) ? 1 : obj[l] + 1);
    }
    //console.log(obj)
    
    for (var i in obj){
    if(obj[i]>1) res.push(obj[i])
    }
    if(res.length==0){res.push(1); return res}
    else return res
    }
    
    function num(vect){
    var res =  1
    
    }
    
    
    function denom(vect){
    var res = 1
    for(var i in vect){
    res*= factorial(vect[i])
    }
    return res
    }
    
    
    function factorial (n){
    if (n==0 || n==1){
    return 1;
    }
    return factorial(n-1)*n;
    }  
    

提交回复
热议问题