0
votes

Comptez minimum no. d'opérations requises pour faire un premier caractère et dernier caractère égal à

Nous ne pouvons faire que deux opérations: 1.Retirer une lettre du début de la chaîne. 2.Retirer une lettre de la fin de la chaîne.

J'ai écrit le code suivant pour la question ci-dessus: p>

var f=function(s1){
  if(s1[s1.length-1]===s1[0]){
    return 0;
  }
  if(s1[s1.length-2]===s1[0]||s1[s1.length-1]===s1[1])
    {
      return 1;
    //document.write("hsdh");
    }

  else
    return 1+Math.min(f(s1.substring(1),f(s1.substring(0,s1[s1.length-1]))));
}


6 commentaires

ici est un lien vers le problème.


Veuillez ajouter tout ce qui est pertinent pour la question / problème dans la question elle-même . Pour une meilleure compréhension de l'exigence / du problème, certains cas de test et leur production aideraient.


Je me souviendrai de la prochaine fois.


Pas "la prochaine fois" , maintenant. Veuillez modifier votre question ( "Modifier" link est inférieure à votre question) et ajoutez toutes les infos pertinentes .


La récursion serait tirée, je pense.


Cette méthode est super lente, mais devrait fonctionner. Cela ne fonctionne pas, car votre fonction renvoie la mauvaise réponse pour "", "A" et "AB", par exemple.


3 Réponses :


1
votes

J'ai réussi à créer quelque chose qui semble fonctionner pour les intrants que vous avez suggéré, mais je ne suis pas sûr que ce soit ce que vous voulez vraiment.

Vous pouvez essayer mon code ici: p>

p>

function testNumberOfOperations(str) {
  if (str[0] === str[str.length - 1]) {
    return 0;
  }

  var result = -1;

  for (var i = 0; i < str.length; ++i) {
    var letter = str[i];

    var firstIndex = str.indexOf(letter);
    var lastIndex = str.lastIndexOf(letter);

    if (firstIndex !== lastIndex) {
      var operations = Math.abs(str.length - (firstIndex + lastIndex) + 1);
      
      if (result === -1 || operations < result) {
        result = operations;
      }
    }
  }
  
  return result;
}


var str = 'abcda';
console.log('result = ', testNumberOfOperations(str));


var str = 'abcdefghiab';
console.log('result = ', testNumberOfOperations(str));


var str = 'pqr';
console.log('result = ', testNumberOfOperations(str));

var str = 'bacdefghipalop';
console.log('result = ', testNumberOfOperations(str));


1 commentaires

En fait, je veux savoir si mon concept récursif a raison ou non et où je fais une erreur de la mettre en œuvre.



2
votes

Vous pouvez effectuer cela consiste à utiliser un hashmap en temps linéaire et que le trop pire des cas sera O (n) où N est la longueur de la chaîne lorsque tous les caractères sont distincts.

Utilisez 2 pointeurs l'un de gauche et une autre de Fin droite et traverser simultanément et stocker le caractère dans HASHMAP avec son index.

Si un caractère est déjà dans HASHMAP que son simple mathématique sur des index. xxx


0 commentaires

1
votes

J'espère que cela peut expliquer où votre fonction a mal tourné. (remplacez le contenu actuel, avec les lignes suivantes). Ils sont surtout les mêmes, mais avec un peu de dégâts chacun, puisque vous vouliez comprendre où vous avez mal tourné.

Si la chaîne est / est devenue inutile de vérifier, rien de plus ne peut être fait: P>

  else return 1 + Math.min(f(s1.substring(1)), f(s1.substring(0, s1.length - 1)));


1 commentaires

merci rob.that's ce que je voulais comprendre.