2019拼多多暑期实习生机试题-02趣味字母卡片(java)

 

分析:

1. 名词解释

       字母序要理解:字典序(dictionary order),又称 字母序(alphabetical order),原意是表示英文单词在字典中的先后顺序,在计算机领域中扩展成两个任意字符串的大小关系。在字典中,单词是按照首字母在字母表中的顺序进行排列的,比如 alpha 在 beta 之前。而第一个字母相同时,会去比较两个单词的第二个字母在字母表中的顺序,比如 account 在 advanced 之前,以此类推。

2. 算法思想

        在讲字符串全部转为小写后先计算重复的字符个数。然后从头开始检查一直重复的字符,并将此字符重复字数减一,直到遇到重复次数为1的字符为止。检查的过程一直记录最小的字符,最后输出。

        原因:题目中删除所有重复的字符,无论怎么删最后的字符个数是一样的。我们要做的就是使头一个字符最小(题目中只需要输出第一个字符),遇到重复的字符我们有两种选择:如果这个字符留在前面能作为最小的字符就留着,否则就删掉。

java代码:

import java.util.*;
/**
 * @author: Mr.Hu
 * @create: 2019-03-01 21:10
 */
public class Main{
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        while (sc.hasNext()){
            String s=sc.next().toLowerCase();
            Map<Character,Integer> map =new HashMap<>();
            for (int i = 0; i < s.length(); i++) {
                if(map.containsKey(s.charAt(i)))
                    map.put(s.charAt(i),map.get(s.charAt(i))+1);
                else map.put(s.charAt(i),1);
            }
            char result ='z';
            int i=0;
            while (map.get(s.charAt(i)) >1) {   //是重复的我要记录下最小的,将重复数-1
                if(s.charAt(i)<result) result=s.charAt(i);
                map.put(s.charAt(i),map.get(s.charAt(i))-1);
                i++;
            }
            if(s.charAt(i)<result) result=s.charAt(i);
            System.out.println(result);
        }
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值