Y a-t-il des fonctions dans les bibliothèques Java standard qui, avec une séquence CharSequence, produisent l'inverse en O (1)?Inverse une chaîne dans Java, dans O (1)?
Je suppose que c'est "facile" à implémenter, je me demandais simplement s'il existe déjà. (Je soupçonne que la raison pour laquelle cela n'est pas offert est que la manière "facile" serait en fait de casser les points de code multi-char - mais dans beaucoup de cas, nous savons que nous n'en avons pas).
Merci
Mise à jour Heh, il est un peu amusant que la plupart ont pensé que ce "impossible", bon travail les gars! Eh bien, en fait, il est (conceptuellement) trivial - pseudojava suit pour préciser:
class MyReverseString extends String { //of course I can't extend String!
final String delegate;
MyReverseString(String delegate) { this.delegate = delegate; }
int length() { return delegate.length(); }
int charAt(int i) { return delegate.charAt(delegate.length() - 1 - i); }
}
Je laisse la question ouverte pour un peu plus, juste les rares cas où quelque chose comme la solution évidente (par exemple, voir Jon Celui de Skeet) existe déjà dans le JDK et quelqu'un le sait. (Encore une fois, hautement improbable en raison de ces points de code méchant).
Modifier Probablement la confusion est venue de moi ayant "chaîne" dans le titre (mais pas String!), Alors que je demande seulement "l'inverse d'une CharSequence". Si vous étiez confus, désolé. J'aurais espéré que la partie O (1) indiquerait clairement ce qui était demandé.
Et en passant, this was the question that made me ask this one. (C'est un cas où il serait plus facile d'exécuter une regex de droite à gauche, pas de gauche à droite, donc il peut y avoir une valeur pratique même pour l'implémentation simple/broken-codepoints)
Comment voulez-vous inverser une chaîne en O (1)? Vous devez parcourir la chaîne, n'est-ce pas? Sûrement la limite inférieure est O (n)? – Blorgbeard
Dans 'O (1)'? Faites pivoter votre moniteur de 180 degrés. –
O (1) ne signifie pas que dans votre code vous accomplissez la tâche avec une seule ligne de code sans boucles ... de toute façon la solution StringBuffer() semble la plus viable ici. –