[蓝蓝计算机考研算法训练二期] -day02
3、计算字符串中含有的不同字符的个数
编写一个函数,计算字符串中含有的不同字符的个数。字符在ASCII码范围内( 0~127,包括0和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算-次 例如,对于字符串abaca唁,有a、b. c三种不同的字符,因此输出3。
数据范围: 1 <= n<=500
输入描述.
输入一行没有空格的字符串。
输出描述:
输入字符串中范围在(0~127,包括0和127)字符的种数。
输入:
abc
输出:
3
输入:
aaa
输出:
1
思路:
利用map存储字符,若出现则把该字符所对应的value值+1,返回的map.size()就是所求值;
具体实现:
static int sum(String string){
//利用map存储字符
Map<Character,Integer> map = new HashMap();
for (int i = 0; i < string.length();i++){
//若map不存在该字符串,则放入map中
if (!map.containsKey(string.charAt(i))){
map.put(string.charAt(i),1);
}else {
//若存在则把对应的value值+1,其实不需要这个else程序也能正确运行但是为了凑字数就蛮写一下
map.put(string.charAt(i),map.get(string.charAt(i))+1);
}
}
//map的大小就是所求的不同字符总数的值
return map.size();
}
时间复杂度:O(n);
空间复杂度:O(m);
4、从键盘输入两个数字n,m,求解m和n的最小公倍数。
思路
利用一个辅助变量记录这个两个数的小的值,因为最小公倍数肯定小于这两个数的小的那个值;
通过循环查找是否存在公倍数,若存在则直接返回,若无则直接返回1;
具体实现
```
static int min(int a,int b){
int temp = Math.max(a,b);
for (int i = temp;i <= a*b;i++){
if (i % a == 0 & i % b == 0)return i;
}
return -1;
}
```
时间复杂度:O(n);
空间复杂度:O(n);
小结