teclado roto (Tragedia texto) de Java UVa11988

teclado roto (Tragedia texto) de Java UVa11988

Un algoritmo o de trabajo, esto es en realidad un título acm. buscar en línea un poco, numeradas UVa11988 . Preámbulos, directamente sobre la cuestión.

título

¿Tiene un teclado roto. Todas las teclas del teclado funcionan correctamente, pero a veces el botón de inicio o pulse la tecla Fin automáticamente. Usted no sabe de la existencia de este teclado problema, sino más bien a concentrarse en jugar el manuscrito, ni siquiera se enciende el monitor. Cuando se enciende el monitor para mostrar delante de usted que era un texto tragedia. Su tarea consiste en calcular el texto de esta tragedia antes de abrir la pantalla.

Que comprende una pluralidad de conjuntos de datos de entrada. Cada conjunto de datos por línea, que comprende no más de 100.000 cartas, el carácter de subrayado "[" o "]". En la que el carácter "[" indica la tecla de inicio, "]" representa la tecla Fin. Introduzca la marca de finalización para el final del archivo (EOF). Introduzca el archivo no debe exceder de 5 MB. Para cada prueba, una línea de salida, es decir trágica texto en la pantalla.

Entrada:
This_is_a_ [Beiju] _TEXT

[[]] [] [] Happy_Birthday_to_Tsinghua_University

Salida:
BeijuThis_is_a_text

Happy_Birthday_to_Tsinghua_University

análisis

En la causa teclas Inicio y Fin, y el cursor se encuentra en constante movimiento, donde se mueva de que vamos a seguir para escribir caracteres. En la estructura de datos se presenta en el inserto.

Matriz inconveniente para operación de inserción maquillaje, los elementos móviles cada tiempo. La lista adecuado para la inserción, por lo que utilizan una estructura de lista enlazada (por no explicar por qué la lista aquí, además, si el uso es una lista de ideas realmente una lista o datos vinculados se pueden combinar, aquí está mi lista)

Cabeza y cola punteros y arrays método de conversación entrante, se reunió '[' o ']', se mueve directamente a la cabeza o la bandera TRASERO, y luego continúan.

De lo contrario, se juzga bandera en el nodo de cola o en un / el primer nodo intermedio , el nodo en el extremo en el complemento normal, pero también recordar bandera y la parte trasera puntero al último elemento; en intermedia / el primer nodo a ser introducido cuando una tmp, añadir el nuevo nodo para hacer, hazlo operación de inserción normal, entonces la bandera tmp punto.

código Java

import java.io.BufferedInputStream;
import java.util.Scanner;

/**
 * @ClassName BrokenKeyboard
 * @Description 悲剧的文本
 * @author 滑技工厂 https://blog.csdn.net/qq_41718454
 * @date 2020/3/7
 * @version 1.0
 */
public class BrokenKeyboard {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        String s = sc.nextLine();
        char[] chars = s.toCharArray();
        Node node = new Node();
        Node rear = node;
        node.create(node,rear,chars);
        node.print(node);
    }


    static class Node {
        char data;
        Node next;
        public Node() {
        }

        public Node(char data, Node next) {
            this.data = data;
            this.next = next;
        }
        public void print(Node node) {

            while (node != null) {
                if (node.data != 0)
                    System.out.print(node.data);
                node = node.next;
            }

        }
        /*
         * @Title create
         * @Description create方法,遇见'['从头指针插入,遇见']'从尾指针插入
         * @author 滑技工厂
         * @Date 2020/3/7
         * @param [head, a]
         * @return void
         * @throws
         */
        public void create(Node head, Node rear, char a[]) {
            //指针开始等于头结点
            Node flag = head;
            for (int i = 0; i < a.length; i++) {

                if (a[i] == '[') {
                    //[ 指针移到头结点
                    flag = head;
                    continue;
                } else if (a[i] == ']') {
                    //指针移到尾结点
                    flag = rear;
                    continue;
                }

                if (flag.next == null) {//flag=rear 在尾结点
                    flag.next = new Node(a[i], null);
                    flag = flag.next;
                    //保证rear始终在尾结点
                    rear = flag;
                } else {//不在尾结点,头结点还是中间结点都一样,next有值

                    Node tmp = new Node(a[i], flag.next);
                    flag.next = tmp;
                    flag = tmp;
                }

            }
        }

    }

}

Hay ayuda para usted si usted señala que un poco de alabanza, ¿qué consejo puedo comentar.

Finalmente mascot Town House
Aquí Insertar imagen Descripción

Publicado 41 artículos originales · ganado elogios 94 · vistas 9559

Supongo que te gusta

Origin blog.csdn.net/qq_41718454/article/details/104710877
Recomendado
Clasificación