我看到了this和this的问题,但我的不同。我想在java中为它编写一个高效的代码。我想出了两个解决方案:
find_first_reapeted(char[] input)
{
HashMap<Character,Integer> myhash = new HashMap<Character,Integer> ();
for(int i=0;i<input.length;i++)
{
if(myhash.containsKey(input[i])
myhash.put(input[i],2); //just put 2 even if it is more than 2
else
myhash.put(input[i],1);
}
for(int i=0;i<input.length;i++)
{
if(myhash.getValue(input[i])==1)
return input[i];
}
}
find_first_reapeted(char[] input)
{
int[] allchars = new int[26];
for(int i=0;i<input.length;i++)
{
allchars[input[i]-'a'] += 1;
}
for(int i=0;i<input.length;i++)
{
if(allchars[input[i]-'a']==1)
return input[i];
}
}
首先是有更好的解决方案吗? (int时间和空间复杂度)? 如果没有上述哪一个更好?我不确定hashmap的空间复杂性!
答案 0 :(得分:3)
怎么样
第一个重复的角色。
char find_first_repeated(char[] input) {
BitSet bs = new BitSet();
for(char c : input) {
if(bs.get(c))
return c;
bs.set(c);
}
return '\uffff'; // invalid char
}
第一个非重复字符,我会使用第二种方法,但使用for-each循环使其更清晰。