J'ai une chaîne comme ceci:Comment trouver la séquence la plus courte d'astérisques séparant deux lettres distinctes dans une chaîne en utilisant des algorithmes STL?
A*A**B***A**
Je suis intéressé par des séquences d'astérisques qui sont entre deux lettres distinctes, en particulier, je dois trouver la longueur de la plus courte telle séquence. Pour la chaîne ci-dessus, la réponse est, bien sûr, 2: A**B
Je peux facilement résoudre ce problème en utilisant une boucle traditionnelle, les gens dont je suis habitué à:
const string s = "A*A**B***A**";
string::size_type last_letter=-1, min_seq_len=s.size();
for(int i = 0; i < s.size(); i++) {
if(last_letter == -1 || s[i] == '*' || s[i] == s[last_letter]) {
if(s[i] != '*') {
last_letter = i;
}
} else {
min_seq_len = min(min_seq_len, i-last_letter-1);
last_letter = i;
}
}
Cependant, il est un moyen de le faire en utilisant le C++ algorithms library, itérateurs etc?
Je pose cette question parce que j'ai remarqué que j'ai de la difficulté à apprendre comment utiliser ces fonctions pour résoudre des problèmes d'algorithmes et que je trouve plus facile d'écrire des boucles à la main. Et je voudrais apprendre enfin fonctionner sur les algorithmes C, gammes, itérateurs etc.
Re, groupe _un de « lettre + astérisques + lettre » chunks_: Soyez prudent, car il une lettre peut faire partie de deux « morceaux ». –