机试题总结

 

1.实现括号的匹配

复制代码
package test;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Stack;

/**
 * 括号匹配==()(){[]{}}
 * 
 * @author Administrator
 *
 */
public class BracketMatch {

    public static void main(String[] args) {
        // 利用栈进行匹配,左括号就进栈,遇到右括号出栈,匹配出栈的和右括号是否匹配

        String testStr = "{{3534{{}}ertr4534[543](364())";
        char[] charArray = testStr.toCharArray();
        boolean result = true;

        // 括号规则
        Map<Character, Character> rules = new HashMap<>();
        rules.put('(', ')');
        rules.put('[', ']');
        rules.put('{', '}');

        Set<Character> keySet = rules.keySet();
        Collection<Character> values = rules.values();
        Stack<Character> stack = new Stack<>();
        for (Character c : charArray) {
            if (c == null) {
                continue;
            }

            // key包含的进行入栈
            if (keySet.contains(c)) {
                stack.push(c);
                continue;
            }

            // 值包含的进行出栈
            if (values.contains(c)) {
                if (stack.isEmpty()) {
                    result = false;
                    break;
                }

                Character popedC = stack.pop();
                // 判断是否相等
                boolean result1 = validateNotSure(c, popedC, ')', '(');
                boolean result2 = validateNotSure(c, popedC, '}', '{');
                boolean result3 = validateNotSure(c, popedC, ']', '[');
                if (!result1 && !result2 && !result3) {
                    result = false;
                    break;
                }
            }
        }

        // 判断栈是否有数据
        result = result && stack.isEmpty();

        System.out.println(result);
    }

    private static boolean validateNotSure(Character c, Character popedC, Character cValue, Character popedCValue) {
        return c.equals(cValue) && popedC.equals(popedCValue);
    }
}
复制代码

 

2.合并两个有序链表

复制代码
package test;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class NodeList<T> {

    private Node<T> first;

    private Node<T> last;

    private int size;

    public boolean add(T value) {
        if (last == null) {
            addFirst(value);
            return true;
        }

        addNormalNode(value);
        return true;
    }

    private void addNormalNode(T value) {
        Node<T> node = new Node<>(last, value, null);
        last.setNext(node);
        this.last = node;
        size++;
    }

    private void addFirst(T value) {
        Node<T> first = new Node<>(null, value, null);
        this.first = first;
        this.last = first;
        size++;
    }

    @Override
    public String toString() {
        if (this.first == null) {
            return "[]";
        }

        Node<T> current = first;
        List<T> result = new ArrayList<>();
        while (current != null) {
            result.add(current.getValue());
            current = current.getNext();
        }

        return StringUtils.join(result);
    }

    public void combineNode(NodeList<T> nodes) {
        if (nodes == null || nodes.size == 0) {
            return;
        }

        Node<T> current = nodes.getFirst();
        while (current != null) {
            add(current.getValue());
            current = current.getNext();
        }
    }

    @Data
    @AllArgsConstructor
    class Node<T> {
        private Node<T> prev;

        private T value;

        private Node<T> next;
    }

    public static void main(String[] args) {
        NodeList<String> list = new NodeList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        NodeList<String> list2 = new NodeList<>();
        list2.add("2");
        list2.add("3");
        list2.add("4");

        list.combineNode(list2);
        System.out.println(list);
    }

}
复制代码

 

posted @   QiaoZhi  阅读(273)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2017-08-01 POI读取Excel(xls、xlsx均可以)——(四)
2017-08-01 POI导出Excel(xls、xlsx均可以,也支持图片)——(三)
2017-08-01 JXL读取Excel(只支持xls版本)——(二)
2017-08-01 JXL导出Excel(只支持xls版本)——(一)
2017-08-01 Java读取Excel转换成JSON字符串进而转换成Java对象
2017-08-01 Java对象与JSON互相转换jsonlib以及手动创建JSON对象与数组——(二)
2017-08-01 GSON中Java对象与JSON互相转换——(一)
点击右上角即可分享
微信分享提示