2020.08.07跟谁学笔试

1.字符串倒转

题目描述
给定一个只有小写字母和括号的字符串,默认是合法的,要求从最内层开始进行倒转
例如:
(u(love)i)----> iloveu

另外一道题目看了一眼,是两个有序链表的合并,总体上这两个编程题都不是很难,但是出现了一个插曲,就是官网上的笔试通知:
image.png
我以为有两个小时的时间,没想到20:00就自动交卷了,算法题目的代码还没有粘贴过去。。。而这两道题目我能写出来,天呐,这属实有点狗,不过没关系,既然笔试这么多,就当是练习写代码了吧,下面是题目的解决

package test_2020_08;

/**
 * @Author : hadoo
 * @Date : 2020/8/7 19:11
 */
public class Solution {
    public static void main(String[] args) {
        String input = "z(ab((cd)e)f)";
        String res = reverseParentheses(input);
        System.out.println(res);
    }
    public static String reverseParentheses(String s){
        char[] chars = s.toCharArray();
        helper(chars,0,chars.length-1);
        StringBuffer sb = new StringBuffer();
        for(char c  : chars){
            if(c >= 'a' && c <= 'z'){
                sb.append(c);
            }
        }
        return sb.toString();
    }
    public static int helper(char[] chars,int i,int j){
        for (int k = i; k <= j; k++) {
            if(chars[k] >= 'a' && chars[k] <= 'z'){
                continue;
            }
            else if (chars[k] == '('){
                int new_start = helper(chars,k+1,j);
                k = new_start + 1;
            }
            else if (chars[k] == ')'){
                reverse(chars,i,k-1);
                return k;
            }
        }
        return -1;
    }
    //用来反转字符
    public static void reverse(char[] chars,int start,int end){
        if(start >= end){
            return;
        }
        while (start < end){
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
        return;
    }
}

2.两个有序链表的合并

这道题目之前应该在博客里面写过,现在就当是链表类型题目的练手再写一次吧。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode temp = dummy;
        while(l1 != null && l2 != null){
            if(l1.val <= l2.val){
                temp.next = l1;
                temp = l1;
                l1 = l1.next;
            }
            else{
                temp.next = l2;
                temp = l2;
                l2 = l2.next;
            }
        }
        if(l1 != null){
            temp.next = l1;
        }
        if(l2 != null){
            temp.next = l2;
        }
        return dummy.next;
    }
}

链表这里的题目之前练习的比较多,直接秒掉
image.png

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://hadoo666.top/archives/20200807跟谁学笔试