一次遍历,考虑状态
用一个temp缓存字符子串,长度不超过3,比较当前字符与上一个字符是否相等
temp只有这几5种情况={空,a,aa,aab}
加上当前字符有这么几种状态{a,aa,aaa,ab,aab,aabb,aabc},但是可以合并,代码如下

package org.niuke.solution67;
import java.util.*;
public class Main {
    private static String solve(String s){
        Queue<Character> queue = new LinkedList<>();
        String res = "", temp = "";
        int pre = 0;
        for(int i = 0; i < s.length(); i++){
            queue.offer(s.charAt(i));
        }
        while (!queue.isEmpty()) {
            int last = temp.length() - 1;
            Character c = queue.poll();
            if(last < 0){
                temp += c;
                pre++;
            }else{
                if(c == temp.charAt(last)){
                    if(pre < 2){//bb 只有
                        pre++;
                        temp += c;
                    }else if(pre == 2){ //aab,aaa 都是直接丢弃
                        continue;
                    }
                }else{//ab aabc,aab
                    if(pre < 2){
                        res += temp;
                        temp = "" + c;
                        pre = 1;
                    }else{
                        if(temp.length() < 3){
                            temp += c;
                        }else{
                            res += temp;
                            temp = "" + c;
                            pre = 1;
                        }

                    }

                }
            }

        }
        return res + temp;
    }
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine());
        while (n > 0) {
            n--;
            String res = solve(scanner.nextLine());
            System.out.println(res);
        }
    }
}