2020中国电信校招编程题

第一题:括号匹配问题

问题描述:输入一行字符串,判断字符串是否匹配。匹配则输出yes,不匹配则输出no。

输入:

{[()]}

输出:

yes

输入:

{[(])}

输出:

no

思路:

在遍历字符串时,

  1. 遇到左括号入栈
  2. 遇到右括号,(1)判断栈是否为空,栈不为空则弹出栈顶元素比较,如果括号匹配,则弹出栈顶元素;如果不匹配,则将标记记为 false ,结束循环。(2)栈为空,则将标记设为 false,结束循环。

代码如下

import java.util.Scanner;
import java.util.Stack;
public class Main 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine())//自测时,测试多行用例
        {
            String str = sc.nextLine();
            char[] ch = str.toCharArray();
            Stack stack = new Stack<>();
            boolean flag=true;
            for(int i=0; i

可以将上述代码优化为如下

import java.util.Scanner;
import java.util.Stack;
public class Main 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine())
        {
            String str = sc.nextLine();
            char[] ch = str.toCharArray();
            Stack stack = new Stack<>();
            boolean flag=true;
            for(int i=0; i

测试结果:

()[]{}
yes
{[()]}
yes
[](}{)
no
{[])(}
no
[(){}])(
no

第二题:求字符串字母的个数,如"ABCCDDEFF"G,CDF字母均重复,则"ABCDEFG"为非重复的字母,输出7即可(思路:遍历一遍HashMap即可,哈希表插入元素时,重复的键会被覆盖)

第三题:求100-1000内的素数,并以5个素数为一行打印出来(这个题目就没必要写了......)

你可能感兴趣的:(中国电信笔试题)