Untitled

 avatar
Darin
plain_text
a year ago
2.2 kB
1
Indexable
Never
package NotepadProgram;

import java.util.ArrayList;

class UserSolution {
    int H, W, cursor, size;
    ArrayList<Character> notepad[];
    int count[][];

    void init(int H, int W, char mStr[]) {
        this.H = H;
        this.W = W;
        notepad = new ArrayList[H];
        // mỗi hàng là một ArrayList
        for (int i = 0; i < H; i++)
            notepad[i] = new ArrayList<Character>();

        count = new int[H][26];
        cursor = 0;
        size = 0;

        int i = 0; // index của xâu cần nhập - dùng để nhập
        int row = 0;
        while (mStr[i] != '\0') {
            if (i == (row + 1) * W)
                row++;
            notepad[row].add(mStr[i]); // nhập ký tự mStr[i]
            count[row][mStr[i] - 'a']++;
            // đếm số lần xuất hiện trong hàng của ký tự
            size++;
            i++;
        }
    }

    void insert(char mChar) {
        int row = cursor / W;
        int col = cursor % W;
        // thêm ký tự vào vị trí col của ArrayList row
        notepad[row].add(col, mChar);
        count[row][mChar - 'a']++;
        cursor++;
        size++;

        // dịch phần tử tràn xuống hàng dưới
        for (int i = row; i < H; i++) {
            if (notepad[i].size() > W) {
                char temp = notepad[i].remove(notepad[i].size() - 1);
                count[i][temp - 'a']--;
                notepad[i + 1].add(0, temp);
                count[i + 1][temp - 'a']++;
            }
        }
    }

    char moveCursor(int mRow, int mCol) {
        // -1 để đưa về index 0
        cursor = (mRow - 1) * W + mCol - 1;
        if (cursor >= size) {
            cursor = size;
            return '$';
        }
        return notepad[mRow - 1].get(mCol - 1);
    }

    int countCharacter(char mChar) {
        int row = cursor / W;
        int col = cursor % W;
        int cnt = 0;
        int i = 0;
        for (char c : notepad[row]) {
            if (i >= col && mChar == c)
                cnt++;
            i++;
        }
        for (int j = row + 1; j < H; j++)
            cnt += count[j][mChar - 'a'];

        return cnt;
    }
}