题目
题解
第一想法
自去年连续刷了90多道题之后再无接触过算法,目前就是一枚小白,大学学的都丢还给老师了orz,看到此题第一想法malloc个新的空字符串,for循环遍历两次,第二层循环找相同的字母,存到新的字符串中,最后再对新字符串遍历,返回第一个非空字符。。。好吧。。连测试都没过,不知道错哪了
正确题解
官方题解:哈希表!对哇,我咋没想到。。新建一个HashSet,将字符串从头到尾遍历一边,存入HashSet,如果哪个存不进去了,直接返回这个字符就好了啊!!!利用了set的特性 不可重复
class Solution {
public char repeatedCharacter(String s) {
Set<Character> seen = new HashSet<Character>();
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(!seen.add(ch)){
return ch;
}
}
return ' ';
}
}
总结
Java的HashSet真方便,C语言的话这个题就复杂些了,温故知新哈希表