Day52字符串中字符不同个数和两数的最小公倍数

177 阅读1分钟

[蓝蓝计算机考研算法训练二期] -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);

小结