分析:
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);
}
}
}