先来手撕三道入门级算法题

简介: 《基础系列》

判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写出程序提出其中年月日。要求:

写出合格的身份证的正则表达式,

^(\d{15}|\d{17}[\dx])$

写程序提取身份证中的年月日


publicclassIdCard

{

    privateString idCard;//私有变量

    publicIdCard(){}//构造方法

   //构造方法

   publicIdCard(String idCard){

       this.idCard=idCard;

     }

 

    publicvoidsetIdCard(String idCard)

    {

        this.idCard=idCard;

    }

 

    publicString getIdCard()

    {

        returnidCard;

    }

 

    //从身份证号码中截取生日

    publicString getBirthday()

    {

      returnthis.getIdCard().substring(614);

    }

 

    publicstaticvoidmain(String args[])

    {

        ShenFenZheng sfz = newShenFenZheng("420154199908157841");

         //调用getBirthday()方法获取生日

        System.out.println("生日:"+ sfz.getBirthday());

    }

}

627.对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符保证字符串中有重复的字符,字符串的长度小于等于500.


packagecom.bjsxt;

importjava.util.ArrayList;

importjava.util.List;

publicclassFirstRepeat {

 

publicstaticvoidmain(String[] args) {

System.out.println(findFirstRepeat("pmedmitjtckhxwhvpwemznhmhzhpueainchqrftkmbjlradhmjekcqzansyzkvqhwnrdgzdbzewdmxkzrscikdaugbvygntrifnolehdtrqjlasofuvzeijbmzehkxknmjekcxswqldknysfsxrqaqzp",152));

}

//返回:y

    publicstaticcharfindFirstRepeat(String A, intn) {

     String[] str=A.split("");

     for(intx=0;x<n;x++){

      intindex=0;

      intnum=0;

      //对于每一个值,都需要从前开始遍历

      while(index<=x){

       if(str[index].equals(str[x])){

        num++;

       }

       index++;

      }

      //该值出现了两次,说明重复了

      if(num>1){

       charflag='x';

       flag=str[x].toCharArray()[0];

       returnflag;

      }

     }

     //返回该值说明已经没有重复的

     return'p';

    }

}

628.写一个完整函数,实现拷贝数组


publicclasstest {

 

publicstaticvoidmain(String[] args) {

int[] arr1 = {10,20,30,40,50};

int[] arr2 = CopyArray(arr1);

 

System.out.println(Arrays.toString(arr2));

}

 

privatestaticint[] CopyArray(int[] arr) {

int[] arr2 = newint[arr.length];

for(inti = 0; i < arr.length; i++) {

arr2[i] = arr[i];

}

returnnull;

}

}

629.写一排序算法,输入10个数字,以逗号分开,可根据参数选择升序或者降序排序,须注明是何种排序算法。


packagecn.bjsxt.demo;

 

importjava.util.Scanner;

 

publicclassSortDemo {

/**

 * 给定的字符串使用,号分隔

 * @param strNumber

 * @return

 */

publicstaticString [] split(String strNumber){

String [] strSplit=strNumber.split(",");

returnstrSplit;

}

/**

 * 将String类型的数组转换成int类型的数组

 * @param strSplit

 * @return

 */

publicstaticint[] getInt(String [] strSplit){

intarr[]=newint[strSplit.length];

for(inti = 0; i < strSplit.length; i++) {

arr[i]=Integer.parseInt(strSplit[i]);

}

returnarr;

}

/**

 * 冒泡排序

 * @param arr

 */

publicstaticvoidsort(int[] arr){

for(inti = 0; i < arr.length-1; i++) {

for(intj = 0; j < arr.length-1-i; j++) {

if(arr[j]>arr[j+1]) {

change(arr,j,j+1);

}

}

}

}

/**

 * 两数交换的方法

 * @param arr 数组

 * @param x 数组中元素的下标

 * @param y 数组中元素的下标

 */

publicstaticvoidchange(int[] arr,intx,inty){

inttemp=arr[x];

arr[x]=arr[y];

arr[y]=temp;

}

/**

 * 测试类

 * @param args

 */

publicstaticvoidmain(String[] args) {

Scanner input=newScanner(System.in);

System.out.println("请输入一个数字串,每个数字以逗号分隔");

String str=input.next();

 

//调用方法

String [] s=split(str);//使用逗号分隔

int[] arr=getInt(s);//调有获得整型数组的方法

sort(arr);//调用排序的方法

for(inti : arr) {

System.out.print(i+"\t");

}

}

}

相关文章
|
11月前
|
存储 C++ 容器
五道超经典题目,带你手撕链表题(多种方法实现)下
五道超经典题目,带你手撕链表题(多种方法实现)
38 1
【动态规划上分复盘】这是你熟悉的地下城游戏吗?
【动态规划上分复盘】这是你熟悉的地下城游戏吗?
面试必考: 手撕代码系列(一)
面试必考: 手撕代码系列(一)
|
11月前
|
C++
五道超经典题目,带你手撕链表题(多种方法实现)上
五道超经典题目,带你手撕链表题(多种方法实现)
93 0
|
算法 C++
【每日算法Day 75】字节跳动面试题:手撕困难题,看过我Day 71的人都会做了!
【每日算法Day 75】字节跳动面试题:手撕困难题,看过我Day 71的人都会做了!
|
存储 算法
给我三分钟,带你领略热血江湖中的并查集算法
给我三分钟,带你领略热血江湖中的并查集算法
给我三分钟,带你领略热血江湖中的并查集算法
|
前端开发 算法
看了涡流大佬的面试文章的总结(手撕代码 & 算法)
看了涡流大佬的面试文章的总结(手撕代码&算法)
|
算法 搜索推荐
【算法实践】有始有终,雨露均沾--手把手带你手撸选择排序
选择排序是一个非常经典且简单直观的排序算法,无论什么数据进去都是 O(n^2) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。其排序时,元素交换次数最差的情况为n−1次。选择排序的原理是先固定每个元素的位置,在序列中找到最小的元素,将这个元素与第一个元素交换位置,其次是除去第一个元素,找到剩余序列中最小的元素,与第二个元素交换位置,以此类推,直到所有的元素排完,就能实现选择排序,所以说选择排序是有始有终,雨露均沾的一个算法,哈哈~ 选择排序的基本思想是:每一趟在n−i+1 ( i = 1 , 2 , . . . , n − 1 ) 个元素中选择最小的
96 0
|
算法 搜索推荐
基础的手撕算法题
《基础系列》
68 0
|
前端开发 算法
前端36道高频手撕算法题(下)
前端36道高频手撕算法题(下)
前端36道高频手撕算法题(下)