笔试题1

Posted zzm96

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试题1相关的知识,希望对你有一定的参考价值。

1. 解压缩字符串

  由内至外还原字符串并替换

 1 package Exe1;
 2 
 3 import java.util.Collections;
 4 import java.util.Scanner;
 5 
 6 /**
 7  * @author zzm
 8  * @data 2020/4/10 18:16
 9  * 小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,
10  * 对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且1<=m<=100),例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?
11 输入描述:
12 输入第一行包含一个字符串s,代表压缩后的字符串。
13 S的长度<=1000;
14 S仅包含大写字母、[、]、|;
15 解压后的字符串长度不超过100000;
16 压缩递归层数不超过10层;
17 
18 输出描述:
19 输出一个字符串,代表解压后的字符串。
20  */
21 public class Compress {
22     public static void main(String[] args) {
23         Scanner scanner = new Scanner(System.in);
24         String str = scanner.next();
25         scanner.close();
26         StringBuilder s = new StringBuilder(str);
27         char c;
28 
29         for (int i = 0; i < s.length(); i++) {
30             c = s.charAt(i);
31             if (c == ‘]‘) {
32                 int left = i, mid;
33                 while (s.charAt(--left) != ‘|‘) ;
34                 mid = left;
35                 while (s.charAt(--left) != ‘[‘) ;
36                 int times = Integer.parseInt(s.substring(left + 1, mid));
37                 String newStr = s.substring(mid + 1, i);
38                 newStr = String.join("", Collections.nCopies(times, newStr));
39 
40                 s.replace(left,i+1,newStr);
41                 i = left;
42             }
43         }
44         System.out.println(s);
45     }
46 }

 2. 逛街看楼问题

  利用栈缩短时间: 

      当前楼往左看,比左边楼低则能比处在左边楼多看一座,否则拆(直到左边楼比当前楼高);

      当前楼往右看,比右边楼低则能比处在右边楼多看一座,否则拆(直到右边楼比当前楼高)。

package Exe1;

import java.util.Scanner;
import java.util.Stack;

/**
 * @author zzm
 * @data 2020/4/10 22:31
 * 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。
 * 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?
 * (当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)
 * <p>
 * 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表每一栋楼的高度。
 * 1<=n<=100000;
 * 1<=wi<=100000;
 * <p>
 * 输出一行,包含空格分割的n个数字vi,分别代表小Q在第i栋楼时能看到的楼的数量。
 */
public class HangStreet {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) nums[i] = scanner.nextInt();
        scanner.close();
        int totle;

        Stack<Integer> lefts = new Stack<>();
        Stack<Integer> rights = new Stack<>();

        int[] a = new int[n];
        int[] b = new int[n];

        for (int i = 0, j = n - 1; i < n && j >= 0; i++, j--) {
            a[i] = lefts.size();
            b[j] = rights.size();

            while (!lefts.isEmpty() && lefts.peek() <= nums[i]) lefts.pop();
            while (!rights.isEmpty() && rights.peek() <= nums[j]) rights.pop();

            lefts.push(nums[i]);
            rights.push(nums[j]);
        }

        for (int i = 0; i < n; i++) {
            totle = a[i] + b[i] + 1;
            if (i == n - 1) System.out.print(totle);
            else System.out.print(totle + " ");
        }

    }
}

 

以上是关于笔试题1的主要内容,如果未能解决你的问题,请参考以下文章

IT笔试题

经典PHP笔试题

Perl 笔试题1

React setState 笔试题,下面的代码输出什么?

Java笔试题之《Java代码查错》

.NET笔试题集