微众银行笔试题

1 题目一:

给定一个十进制的数,求转化为十六进制后,字符串结果中所有字符的数量

  1. 转换进制的思路是:首先对数字进行取余,然后得到的为数放在最前面
  2. 之后对原有数字更新,进行÷操作
  3. 十六进制有些特殊,存在大写字母,需要进行判断判断,可以使用数字的类型转换,进行强转。
package wuezgigb;

public class D1 {
    public static void main(String[] args) {
        //题目:十进制转变为十六进制
        //思路:对十进制数进行取余操作,操作,然后把结果添加的末端
        int data=160;

        //进制转换
        String result="";
        char temp=' ';
        //1)特殊情况
        if(data==0) result="0";

        //2)一般情况
        while(data>0){
            int c=data%16;
            //判断c采用什么字符表示
            if(c<10){
                temp=(char) ('0'+c);
            }else{
                temp=(char) ('A'+c-10);
            }
            result=temp+result; //把字符添加在最前面
            data=data/16;
        }
        System.out.println(result);

    }

}

1 题目二:

  1. 给定一个长度为n的字符串,如果字符串的字串包括k个字符x,那么我们就认为这个字串是“K字符字串”。

  2. 串中任意个连续的字符组成的子序列成为该字串的字串,空串不包含。

  3. 对于一个字串,位置不一样的同样的字符也算做事新的字串,例如字符串为“”aba“”,那么其字串有"a",“b”,“a”,“ab”,“ba”,“aba”,都是其字串

  4. 输入:
    n k x
    字符串

  5. 输出:
    k字符子串的个数

案例一:
输入:
5 1 a
babab
输出:
8
案例二:
输入:
4 1 a
aaaa
输出
4
  1. 思路
    1)首先定义一个比字符串长度+1的数组,存放从开始到最后,在每个位置之前包含目标字符的个数
    例如(abaab,目标值为a),数组为【0,1,1,2,3,3】
    2)通过遍历进行查找,首先是i从开始i=1到i=n结束:i=1;i<=n;i++
    3)嵌套for循环,j=i-1;j>=0;j–
    4)循环的语句是:if(L[i]-L[j]==k,则满足要求,result++
    5)可以添加一个剪枝效果,如果L[i]-L[j]>K了,那么后面的也不会满足,直接结束
    6)这道题的思路很好,通过这种数组的方法,可以方便统计需要的数字,不用挨个比较。
package wuezgigb;

import java.util.Arrays;

public class D2 {
    public static void main(String[] args) {
        int n=5;
        int k=1;
        char x='a';
        String string="babab";
        int result=0;

        //方法:采用接露水的方法
        int[] L=new int[n+1];
        for(int i=0;i<n;i++){
            if(string.charAt(i)==x){
                L[i+1]=L[i]+1; //所以i对应L[i+1]
            }else{
                L[i+1]=L[i];
            }
        }
        System.out.println(Arrays.toString(L));

        //进行双循环遍历计数(里面带了一个剪枝的效果)
        for(int i=0;i<n;i++){
            for(int j=i;j>=0;j--){
                if(L[i+1]-L[j]<k){
                    continue;
                }else if(L[i+1]-L[j]==k){
                    result++;
                }else{
                    break;
                }
            }
        }
        System.out.println(result);

    }
}

你可能感兴趣的:(笔试题目,java,算法,开发语言)