牛客网刷题
伎俩储备:
//获取键盘输入 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(); }
击石乃有火,不击元无烟!!

浙公网安备 33010602011771号