原题链接
描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
后台会用以下方式调用Insert 和 FirstAppearingOnce 函数。
string caseout = "";
1.读入测试用例字符串casein
2.如果对应语言有Init()函数的话,执行Init() 函数
3.循环遍历字符串里的每一个字符ch {
Insert(ch);
caseout += FirstAppearingOnce()
}
\2. 输出caseout,进行比较。
返回值描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
示例
输入:"google"
返回值:"ggg#ll"
思路
和 JZ34很像的。
解答
import java.util.Arrays;
import java.util.HashMap;
public class Solution {
int[] a = new int[128];
String tmp = "";
//Insert one char from stringstream
public void Insert(char ch) {
a[ch]++;
tmp += ch;
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce() {
for (int i = 0; i < tmp.length(); i++) {
if (a[tmp.charAt(i)] == 1)
return tmp.charAt(i);
}
return ‘#‘;
}
}