1. 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
示例:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
除了使用哈希表,还可以使用 char[256]来存储结果; char 值范围为 -128~127
class Solution {
public char firstUniqChar(String s) {
char[] c = s.toCharArray();
int len = c.length;
char[] result = new char[127];
for(int i = 0;i < len;i++){
result[c[i]]++;
}
for(int i = 0;i < len;i++){
if(result[c[i]] == 1)
return c[i];
}
return ' ';
}
}
2. 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
这里使用 List 来按顺序存字符,用来取出第一个。需要记住 List 移除元素的 api。一个是按照索引remove,一个是通过元素 equals 方法来移除。
E remove(int index);
boolean remove(Object o);
public class Solution {
char[] c = new char[256];
ArrayList<Character> q = new ArrayList<>();
public void Insert(char ch) {
if (c[ch] == 0) {
q.add(ch);
} else if (c[ch] == 1) {
q.remove(new Character(ch));
}
c[ch] += 1;
}
public char FirstAppearingOnce() {
if (q.size() == 0) return '#';
return q.get(0);
}
}
网友评论