壊れたキーボード(テキスト悲劇)は、Java UVa11988

壊れたキーボード(テキスト悲劇)は、Java UVa11988

一つのアルゴリズムや仕事が、これは実際にACMのタイトルです。オンラインビット、番号検索UVa11988を直接質問に騒ぎ、。

タイトル

あなたは壊れたキーボードを持っていますか。キーボード上のすべてのキーが正常に動作しますが、時々、ホームボタンまたはEndキーに自動的にされます。あなたはこの問題キーボードの存在を知らないのではなく、原稿を演奏に集中することもモニターの電源を入れませんでした。あなたがあなたの前に表示するために、モニターの電源をオンにすると、それは悲劇のテキストでした。あなたの仕事は、ディスプレイを開く前に、この悲劇のテキストを計算することです。

入力データの複数のセットを含みます。これ以上100,000文字、下線文字「[」や「]を含ん行あたりのデータの各セット。」どの文字で「[」Homeキーを示し、「]」Endキーを表します。ファイルの終わり(EOF)のために終了マークを入力します。5メガバイトを超えていないファイルを入力します。各試験、出力ライン、画面上すなわち悲劇的なテキストの。

入力:
This_is_a_ [Beiju] _TEXT

[] [] [] Happy_Birthday_to_Tsinghua_University

出力:
BeijuThis_is_a_text

Happy_Birthday_to_Tsinghua_University

分析

ホームキーとEndキー、カーソルは、我々は文字を書き続けることから、移動するための移動、上常にあるために。データ構造では、インサートに提示されています。

挿入操作を行うためのアレイ不便、かかる可動要素毎時間。挿入に適しリスト、彼らはリンクリスト構造を使用して(ここではリスト理由を説明しませため、加えて、使用が実際にリンクされたリストやデータであるかどうかは、リストのアイデアを組み合わせることができ、ここに私のリストです)

ヘッドとテールポインタと配列着信話法、満たさ「[」または「]」は、それがヘッド又は後フラグに直接移動し、その後、継続されます。

それ以外の場合は、でフラグが判定されるテール・ノードまたはで中間体/第一ノード、通常アドオンの端にあるノードだけでなく、覚えフラグリア最後の要素へのポインタと、に中間/最初のノードを導入する場合TMPは、実行するための新しいノードを追加し、その後、通常の挿入操作を行うフラグポイントTMPを。

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;
                }

            }
        }

    }

}

あなたは少し賞賛にそれを指している場合、あなたのためにヘルプがあり、どのようなアドバイスをコメントすることができます。

最後のタウンハウスをマスコット
ここに画像を挿入説明

公開された41元の記事 ウォン称賛94 ビュー9559

おすすめ

転載: blog.csdn.net/qq_41718454/article/details/104710877