第一题:字符串距离
题目:
给出两个相同长度的由字符 a 和 b 构成的字符串,定义它们的距离为对应位置不同的字符的数量。如串”aab”与串”aba”的距离为
2;串”ba”与串”aa”的距离为 1;串”baa”和串”baa”的距离为 0。下面给出两个字符串 S 与 T,其中 S 的长度不小于 T
的长度。我们用|S|代表 S 的长度,|T|代表 T 的长度,那么在 S 中一共有|S|-|T|+1 个与T长度相同的子串,现在你需要计算
T 串与这些|S|-|T|+1 个子串的距离的和。
输入描述:
第一行包含一个字符串 S。第二行包含一个字符串 T。S 和 T 均由字符 a 和 b 组成,1 ≤ |T| ≤ |S| ≤105 。
输出描述:
输出对应的答案。
样例:
in: aab aba out: 2
in: aaabb bab out: 5
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String s=scanner.nextLine();
// String q=scanner.nextLine();
String t=scanner.nextLine();
int n1=s.length();
int n2=t.length();
// System.out.println(n1+"----"+n2);
int res=0;
char []str1=s.toCharArray();
char []str2=t.toCharArray();
for(int i=0;i<=n1-n2;i++){
res+=bd(str1,i,i+n2-1,str2);
}
System.out.println(res);
}
public static int bd(char str1[],int start,int end,char []str2){
// System.out.print(start+"--"+end);
int sum=0;
int p=str2.length;
for(int i=start,j=0;i<=end;i++,j++){
if(str1[i]!=str2[j]){
sum++;
}
}
// System.out.println("****"+sum);
return sum;
}
2.第二题:数字字符
题目:
在十进制表示中,任意一个正整数都可以用字符‘0’-‘9’表示出来。但是当‘0’-‘9’这些字符每种字符的数量有限时,可能有些正整数就无法表示出来了。比如你有两个‘1’,一个‘2’
,那么你能表示出 11,12,121 等等,但是无法表示出 10,122,200 等数。
现在你手上拥有一些字符,它们都是‘0’-‘9’的字符。你可以选出其中一些字符然后将它们组合成一个数字,那么你所无法组成的最小的正整数是多少?
输入描述:
第一行包含一个由字符’0’-‘9’组成的字符串,表示你可以使用的字符。1 ≤ 字符串长度 ≤ 1000
输出描述:
输出你所无法组成的最小正整数。
样例:
in: 55 out: 1
in: 123456789 out: 10
//整体思路:先统计所有数字的个数。找到拥有最少个数(n)的数字(假设数字为3),
// 则最小值 要么为 n+1个3 ,要么为 1后面m个0(m为0的个数+1)
public static void main(String[] args) {
int []num=new int[10];//保存0-9 每个数字的个数
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
char s[]=str.toCharArray();
for(int i=0;i<s.length;i++){//检查每个数字出现的个数
num[s[i]-'0']++;
}
int min=Integer.MAX_VALUE;//保存 最小个数
int digit=-1;//保存拥有最小个数的数字
for(int i=1;i<10;i++){
if(num[i]<min){
min=num[i];
digit=i;
}
}
System.out.println("min="+min);
if(num[0]<min-1){//判断0的个数是否比 min-1小,是的话 最小值则为1后面 num[0]+1个0
System.out.print("1");
for(int i=0;i<=num[0];i++){
System.out.print("0");
}
}else{//不是的话,最小值就为min+1个digit
for(int i=0;i<=min;i++){
System.out.print(digit);
}
}
}