牛客网刷题


伎俩储备:

//获取键盘输入
java.util.Scanner sc = new java.util.Scanner(System.in);
String str = sc.nextLine();//获取整行  但是取“1 23”引号内是取不出来的 需要两次 ,nextInt();
String str = sc.next();//读取单个字符串,遇空格终止读取


while(sc.hasNext()){//循环体内处理 多次的键盘输入
    m = sc.nextInt();//逻辑可以写在while内
    int a,b;
    for(int i=0;i<m;i++){
        a =sc.nextInt();
        b =sc.nextInt();
    }
}

 

//String分裂为String数组  转义字符  \\.表示小数点  \\s表示 空格,回车,换行等空白符
// +号表示一个或多个的意思 先trim()再split()比较好
String[] strs=str.split(",");

//很实用 str.contains("sdf");
//从0数起,到第5个位子开始截,截到最后 String str = "abcdefghijklmnopqrstuvwxyz"; str.substring(5);
//从0数起,2开始截到3 不包括4号位子 String sb = "abcdefghijklmnopqrstuvwxyz"; sb.substring(2, 4);
//获取String长度 str.length(); //获取数组长度 ary.length; //”截取中间的非空白字符“,而非”去掉两端的空白字符“ str.trim() //得到位置索引,返回int str.indexOf(","); str.indexOf(',',4);//从4号位子开始找 //char,String,char[]相互转化 char ch = 'c'; String str = String.valueOf(ch); String str2 = Character.toString(ch); String str = "rain2020"; char [] chList = str.toCharArray(); char[] ch = {'r','a','i','n'}; ch[1]+""; String str1 = new String(ch); String str2 = String.valueOf(ch); String toBinary = Integer.toBinaryString(num); char c = toBinary.charAt(i); (int)ch2[i]==0//char[]初始化后没赋值的项默认值为0

 

Arrays.sort(arr);//对数组进行排序
Collections.sort(arr);
 
public static void swap(List<?> list, int i, int j) {//交换list中的两个元素
    final List l = list;
    l.set(i, l.set(j, l.get(i)));
}

for(int i=0;i<arr.length;i++){//冒泡排序 通常再内部操作几个关联的数组有奇效
    for(int j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1]){
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

 

ArrayList<String> list = new ArrayList<>();
int index = list.indexOf("A");
list.add(index + 1, "Z");//某个位置插入之后,后边的节点被挤开了(index都增加1)
list.remove("C");
list.remove(2);//这两个删除方式效果一样

 

//break out;或者continue out;
//break用于跳出包含它的最内层循环,break out可以直接跳出被out标记的循环
//另一种跳出最外层循环方式:最外层接收到最内层引起的flag变化

 

StringBuilder sb = new StringBuilder();
String str1 = sb.append(cha[j]).append(cha[j+1]).append(cha[j+2]).toString();
if(set.contains(str1)){}

 

interface Judge{
    public static String GetPwdSecurityLevel(String pPasswordStr)
    {//按题目中要求的 以接口的方式实现 
        return null;
    }
}
public class Main implements Judge{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextLine())
            System.out.println(Judge.GetPwdSecurityLevel(sc.nextLine()));
        sc.close();
    }
}

 

String binaryString = Integer.toBinaryString(number);//将整数转为二进制数字符串
String[] strings = binaryString.split("0+"); //再将字符串按多个0分割
int count = 0;
for (String string : strings) {
    count = Math.max(count, string.length());
}
System.out.println(count);

 

//将字符串反转
StringBuffer sb = new StringBuffer(str);
String temp = sb.reverse().toString();

 

//如果要操作少量的数据用 String;
//多线程操作字符串缓冲区下操作大量数据 StringBuffer;
//单线程操作字符串缓冲区下操作大量数据 StringBuilder

 

boolean result = string.matches(regx);
//这个方法的参数为正则表达式
//返回是否匹配指定的字符串,如果匹配则为true,否则为false

 

//    ^[a-zA-Z]是去匹配目标字符串中以中括号中的a—z或者A—Z开头的字符
//    [^a-zA-Z]是去匹配目标字符串中非a—z也非A—Z的字符

 

String Str = new String("www.google.com");
System.out.print("匹配成功返回值 :" );//匹配成功的部分被替换掉,返回我们想要的替换后的内容
//但是注意,源字符串的内容保持不变!!!
System.out.println(Str.replaceAll("(.*)google(.*)", "runoob" ));
System.out.print("匹配失败返回值 :" );//Str 即没有完成替换任务,把原串给返回
System.out.println(Str.replaceAll("(.*)taobao(.*)", "runoob" ));
//replaceAll和replaceFirst是支持正则的,而replace()是不支持正则替换的
//上面的套路可以用来自定义正则表达式
//matches() 方法用于检测字符串是否匹配给定的正则表达式
//貌似两种用法
Pattern.matches(regex, str);//true
str.matches("(.*)runoob(.*)");//true  
//另:转义字符 将有特殊意义的字符转为常规意义 常规意义转为特殊意义

 

int[] bucket = new int[128];//有说0到255 有说-128到127  有说0到65535
//关于char,多一个思路:频率统计
//将char的整数值对应数组的下标,具体字符的频率用bucket[i]++表示,默认值为0
if(bucket[shortString.charAt(i)] == 0){}
//引申
//byte    1个字节 (8bit)    -2^7~2^7-1即-128到127
//short   2个字节 (16bit)   -2^16~2^16-1
//int     4个字节 (32bit)   -2^31~2^31-1
//long    8个字节 (64bit)   -2^63~2^63-1
//char    2个字节 (16bit)   0 ~ 2^16-1即65535
System.out.println((int)'a');
System.out.println((int)'+');
System.out.println((int)'!');
System.out.println((int)'9');
System.out.println((int)'瞎');
System.out.println('\u778E');
//BIN:二进制binary(Java中以零b/B开头)   OCT:8进制octal(Java中以零开头)
//DEC:10进制hexadecimal HEX:16进制decimal(Java中以零x(零X)开头)

 

//将数组倒序
char[] ch = str.toCharArray();
int len = ch.length;
for(int i=0;i<len/2;i++){
    char temp = ch[len-i-1];
    ch[len-i-1] = ch[i];
    ch[i] = temp;
}

 

//将单词数组 按 字典顺序 排序
String [] arr = new String[n];
Arrays.sort(arr);

 

//十进制转二进制后 1的个数
int t = sc.nextInt();
int count=0;
while(t>0){
    if(t%2==1)count++;
    t=t/2;
}
System.out.println(count);

 

//位运算方式 解上题
int n = scan.nextInt();
int count = 0;
while(n>0){
    if((n&1)>0){
        count++;
    }
    n=n>>1;
}
System.out.println(count);

 

//得到map中key对应的值,没有的话返回一个默认值
map.getOrDefault(key, 0);

 

//正则表达式
Pattern pattern = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$");
Matcher matcher = pattern.matcher(ip);
if (matcher.matches()) {
}

 

//遍历map
for(Map.Entry<String,Integer> it:m.entrySet()){
}

 

int[] num = new int[26];//经常有这种操作
int min = Integer.MAX_VALUE;//还有这种
for(int i=0; i<26; i++) {
    if(num[i] != 0 && num[i] < min) {
        min = num[i];
    }
}

 

//用于判断指定字符是否为字母
if (Character.isLetter(c)){
}

 

//System.exit(int  status)这个方法是用来结束当前正在运行中的java虚拟机。
//status是非零参数,那么表示是非正常退出。
//System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序。
//而System.exit(1)一般放在catch块中,当捕获到异常,需要停止程序
//这玩意儿通常用在void main函数里边!!

 

//判断两个IP是否属于同一子网 (分别跟子网掩码进行位&运算后比较)
for(int i=0;i<ss.length;i++){
    if ((Integer.valueOf(ss[i]) & Integer.valueOf(ss1[i])) == (Integer.valueOf(ss[i]) & Integer.valueOf(ss2[i]))) {
        flag = true;
    } else {
        flag = false;
        break;
    }
}
if (flag) {
    System.out.println(0);
}else {
    System.out.println(2);
}

 

/**
 * 将整数转成对应的八位二进制字符串
 * @param num
 * @return
 */
private static String binaryString(int num) {
    StringBuilder result = new StringBuilder();
    int flag = 1 << 7;//移位操作
    for (int i = 0; i < 8; i++) {
        int val = (flag & num) == 0 ? 0 : 1;//按位与
        result.append(val);
        num <<= 1;//移位操作
    }
    return result.toString();
}

 

 

 

 

 

 

 

 

posted @ 2020-05-30 19:29  夜雨秋池  阅读(426)  评论(0)    收藏  举报