Como una pregunta de la entrevista, por lo general se pregunta sobre los aspectos técnicos de hacer un intercambio in situ de elementos de 8 bits para revertir su orden (independientemente de los caracteres que realmente puedan representar).
Al mismo tiempo, especialmente si está entrevistando a una persona relativamente mayor, al menos podría esperar escuchar algunas preguntas sobre la especificación y la forma exacta de la entrada. Incluso si los dirige de vuelta al simple caso de simplemente intercambiar elementos de 8 bits, saber si piensan o no en términos más amplios que eso puede ser valioso.
Si tiene que lidiar con una amplia gama de entradas, debe pensar en términos de una "pila", un poco como una pila de red. Debe construir su software en varias capas, cada una de las cuales aplica un conjunto bastante específico de transformaciones en un orden específico. Esto le permite mantener cada parte de la transformación lo suficientemente simple como para mantenerla bajo control y tener una oportunidad razonable de cumplir con sus requisitos.
Esbozaré una posibilidad que he encontrado al menos algo viable. Sin embargo, soy el primero en admitir que puede haber otros que tengan mejores ideas. Al menos para mí, esto parece un poco como ingeniería de fuerza bruta, con poca elegancia real.
Normalmente desea comenzar convirtiendo cualquier otra representación a UCS-4 (también conocido como UTF-32). Para esto, generalmente preferiría confiar en la información del usuario que intentar resolverlo usted mismo. En algunos casos, puede estar seguro de que una secuencia particular de octetos no sigue las reglas de un esquema de codificación particular, pero rara vez (si alguna vez) puede estar seguro de que sigue un esquema de codificación particular.
El siguiente paso es opcional. Puede normalizar la entrada a uno de los cuatro formularios de normalización Unicode. En este caso, es probable que desee aplicar la transformación "NFKC": descomposición de compatibilidad seguida de composición canónica. Esto (cuando sea posible) convertirá la combinación de formas diacríticas (como el U + 301 que Jon mencionó) en puntos de código único (por ejemplo, una "A" con un "U + 301" se convertiría en "A latino mayúscula con agudo" , U + 00C1).
Luego, recorre todos los caracteres de principio a fin, separando la cadena en caracteres reales, y si hay (todavía) combinaciones de signos diacríticos, manteniéndolos con los caracteres que modifican. El resultado de esto generalmente será un índice de los caracteres reales en la cadena, como la posición y la longitud de cada uno.
Usted invierte el orden de esos caracteres completos, generalmente utilizando el índice que creó en el paso anterior.
Luego (de nuevo, opcionalmente) aplica otro proceso de normalización Unicode, como NFD (descomposición canónica). Esto convertirá el mencionado "A latino con agudo" de nuevo en dos puntos de código: un "A mayúscula latino" y un "agudo combinado". Si su entrada pasó a contener una U + 00C1, para empezar, sin embargo, también se convertiría que en dos puntos de código también.
Luego codifica la secuencia de puntos de código UCS-4 en la codificación deseada (UTF-8, UTF-16, etc.)
Tenga en cuenta que los pasos de normalización Unicode pueden / cambiarán la cantidad de puntos de código necesarios para almacenar la cadena, por lo que si los incluye, ya no puede planificar el ajuste de la cadena de resultados en el almacenamiento original. Obviamente, los puntos de código resultantes pueden no corresponder directamente a los puntos de código de entrada tampoco.