参考了大佬的c/c++,欢迎指正
https://blog.csdn.net/flushhip/article/details/79660602
import java.util.Scanner;
/**
* 2018美团校招后台开发在线测试第二题
* 求不能组成的最小正整数
* @author LP
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
char[] arr = sc.nextLine().toCharArray();
System.out.println(method(arr));
}
sc.close();
}
public static String method(char[] arr){
int[] num = new int[10];//num[i]是数字i出现的次数
int min = Integer.MAX_VALUE;//最小出现次数(不算0)
int minN = 0;//最小出现次数对应的数字
StringBuffer sb = new StringBuffer();
for(char c : arr){
num[c - 48]++;//记录出现次数
}
//System.out.println(Arrays.toString(num));
for(int i = 1; i < 10; i++){
if(min > num[i]){
min = num[i];//记录最小出现次数
minN = i;//记录出现次数最少的那个数字
}
}
if(num[0] + 1 <= min){//0出现的次数比最少的还少1次,或者更少。比如0是1次,其他是2次。那就返回100
sb.append(minN);//出现次数最小的那个数
for(int i = 1; i <= num[0] + 1; i++)
sb.append(0);//后边添加num[0]+1个0
}else{//0出现的次数不是最少的,要么一样多,要么比别的还多,比如都是2次,返回111
for(int i = 1; i <= min + 1; i++)
sb.append(minN);//最少次数的那个数添加它的次数+1次
}
//System.out.println("数字" + minN + "---出现了" + min + "次");
return sb.toString();
}
}
import java.util.Scanner;
/**
* 2018美团校招后台开发在线测试第一题
* 求两个字符串的差距(和s每一个长度相同的子串比较对应位置不同的数目和)
* 串s,t,s比t长,s和t都由a或b组成
* s:babb t:ab
* ba和ab比,两个位置不同
* ab和ab比,相同
* bb和ab比,一个位置不同
* 返回3
*
* 暴力会超时
* @author LP
*
*/
public class MeiTuan_01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String t = sc.nextLine();
System.out.println(method(s, t));
}
public static int method(String s, String t){
int a = 0;
int b = 0;
int res = 0;
for(int i = 0; i <= s.length() - t.length(); i++){
if(s.charAt(i) == 'a')
a++;
else
b++;
}
for(int i = 0; i < t.length(); i++){
if(t.charAt(i) == 'a')
res += b;
else
res += a;
if(s.charAt(i) == 'a')
a--;
else
b--;
if(i + t.length() < s.length()){
if(s.charAt(i + t.length()) == 'a')
a++;
else
b++;
}
}
return res;
}
}