⬆︎
×

[PAT-A] 1112 Stucked Keyboard

Hyplus目录

Java

import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        String s = sc.next();
        sc.close();

        HashSet<Character> set = new HashSet<>();
        boolean[] flag = new boolean[256];
        boolean[] isOut = new boolean[256];
        StringBuilder res = new StringBuilder();

        for (int i = 0; i < s.length(); ++i) {
            int j = i, cnt = 0;
            while (j < s.length() && s.charAt(j) == s.charAt(i)) {
                j++;
                cnt++;
            }

            if (!flag[s.charAt(i)] && cnt % k == 0) {
                set.add(s.charAt(i));
            } else {
                flag[s.charAt(i)] = true;
                set.remove(s.charAt(i));
            }

            i = j - 1;
        }

        for (int i = 0; i < s.length(); ++i) {
            if (!set.contains(s.charAt(i))) {
                res.append(s.charAt(i));
            } else {
                res.append(s.charAt(i));
                if (!isOut[s.charAt(i)]) {
                    isOut[s.charAt(i)] = true;
                    System.out.print(s.charAt(i));
                }

                int j = i + 1, cnt = 0;
                while (j < s.length() && s.charAt(j) == s.charAt(i) && cnt < k) {
                    j++;
                    cnt++;
                }
                i = j - 1;
            }
        }
        System.out.println();
        System.out.println(res);
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>

using namespace std;

int k;
string s, res;
unordered_set<char> st;
bool flag[256], is_out[256];

int main() {
    cin >> k >> s;

    for (int i = 0; i < s.size(); ++i) {
        int j = i, cnt = 0;
        while (j < s.size() && s[j] == s[i]) j++, cnt++;

        if (!flag[s[i]] && cnt % k == 0) st.insert(s[i]);
        else {
            flag[s[i]] = true;
            if (st.count(s[i])) st.erase(s[i]);
        }

        i = j - 1;
    }

    for (int i = 0; i < s.size(); ++i) {
        if (!st.count(s[i])) res += s[i];
        else {
            res += s[i];
            if (!is_out[s[i]]) {
                is_out[s[i]] = true;
                cout << s[i];
            }

            int j = i + 1, cnt = 0;
            while (j < s.size() && s[j] == s[i] && cnt < k) j++, cnt++;
            i = j - 1;
        }
    }
    cout << endl;
    cout << res << endl;

    return 0;
}

发表评论