代码很简单。它会一次检查所有字符并替换它们的首次出现。但是,对于输入=“ aab”,它失败。我不知道为什么 编程语言是Java。
public class Solution {
/**
* @param str: a string
* @return: a boolean
*/
public boolean isUnique(String str) {
// write your code here
for(int i = 0; i <= 127; i++) {
s = Character.toString((char) i);
if(str.contains(s))
str = str.replaceFirst(s, "");
}
if(str.length() == 0)
return true;
return false;
}
}
编辑
我更改了代码。现在,它会为输入抛出错误
abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+
错误 :
线程“主”中的异常java.util.regex.PatternSyntaxException:索引1附近的未封闭组(在java.util.regex.Pattern.error(Pattern.java:1924)处的^在java.util.regex.Pattern.accept(Pattern .java:1782)at java.util.regex.Pattern.group0(Pattern.java:2857)at java.util.regex.Pattern.sequence(Pattern.java:2018)at java.util.regex.Pattern.expr( Pattern.java:1964)在java.util.regex.Pattern.compile(Pattern.java:1665)在java.util.regex.Pattern。(Pattern.java:1337)在java.util.regex.Pattern.compile(在Main.main(Main.java:11)的Solution.isUnique(Solution.java:12)处的java.lang.String.replaceFirst(String.java:2119)中的Pattern.java:1022)
问题是replaceFirst具有正则表达式作为第一个参数。因此,它扮演的破坏\
,^
,.
和其他人。为此,您可以使用:
str = str.replaceFirst(Pattern.quote(s), "");
从字符中可以"("
得出模式"\\("
。
最后,只需返回:
return str.isEmpty();
或者,您可能仅对以下方面感到满意contains
:
int uniques = 0;
for (int i = 0; i <= 127; i++) {
s = Character.toString((char) i);
if (str.contains(s)) {
++uniques;
}
}
return str.length() == uniques;
您的算法应适用于US-ASCII。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句