这个问题要求我们找到新的字符串b。
b的格式是这样的,每次将一个字符插入到流中时,我们都必须找到第一个非重复字符,并将其附加到b的末尾。如果未找到非重复字符,则在b的末尾追加“#”。
Example:
"a" - first non repeating character 'a'
"ab" - first non repeating character 'a'
"aba" - first non repeating character 'b'
"abad" - first non repeating character 'b'
"abadb" - first non repeating character 'd'
"abadbc" - first non repeating character 'd'
有人能帮我找出我的代码哪里出错了吗。我的逻辑是使用string的substring函数,找到唯一的字符并将其添加到arraylist,然后打印整个arraylist。
public class Solution
{
public String solve(String A)
{
ArrayList<Character>a=new ArrayList<Character>();
String res="";
for(int i=0;i<A.length();i++)
{
String ss=A.substring(0,i+1);
String ue=uniqueCharacters(ss);
// System.out.println(ue);
if(ue!="") a.add(ue.charAt(0));
else a.add('#');
}
for(Character j:a) res+=j;
return res;
}
public static String uniqueCharacters(String test)
{
String temp = "";
for (int i = 0; i < test.length(); i++)
{
char current = test.charAt(i);
if (temp.indexOf(current) < 0) temp = temp + current;
else temp = temp.replace(String.valueOf(current), "");
}
return temp;
}
}
2条答案
按热度按时间p1tboqfb1#
当您第二次遇到字符时,您将其从唯一字符(1)中删除,但如果该字符有第三个字符,则会再次添加该字符(2)。
solution count计算字符数,然后仅返回计数为1(一)的字符数。
k3bvogb12#
最好是使用
Set
使用的结果检测输入字符串中的唯一字符Set::add
返回false
如果未向集合中实际添加任何元素Queue
保持非重复字符。当检测到重复(非唯一)字符时,会将其从队列中删除,如有必要,
"#"
作为占位符应用。如果检测到一个唯一的字符,它将被添加到队列中。实施示例:
测验:
输出: