查看字符串是否包含唯一字符
Find out if a string contains unique characters or not
代码非常简单。它检查所有字符一次并替换它们的第一次出现。但是输入 = "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!@#$%^&*()_+
错误:
线程 "main" java.util.regex.PatternSyntaxException 中的异常:索引 1 附近的未闭合组 ( ^ 在 java.util.regex.Pattern.error(Pattern.java:1924) 在 java.util.regex.Pattern.accept(Pattern.java:1782) 在 java.util.regex.Pattern.group0(Pattern.java:2857) 在 java.util.regex.Pattern.sequence(Pattern.java:2018) 在 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(Pattern.java:1022) 在 java.lang.String.replaceFirst(String.java:2119) 在 Solution.isUnique(Solution.java:12) 在 Main.main(Main.java: 11)
注意: 因为你没有提到你使用的编程语言。我认为它是 C#。
解决方案:
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++) {
int count = str.Split(Character.ToString((char) i)).Length - 1;
if(count>0)
return false;
}
}
}
问题是 replaceFirst 的第一个参数是一个正则表达式。所以它对 \
、^
、.
和其他人造成了严重破坏。为此,您可以使用:
str = str.replaceFirst(Pattern.quote(s), "");
这将从字符 "("
生成模式 "\("
。
最后简单地 return:
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。
代码非常简单。它检查所有字符一次并替换它们的第一次出现。但是输入 = "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!@#$%^&*()_+
错误:
线程 "main" java.util.regex.PatternSyntaxException 中的异常:索引 1 附近的未闭合组 ( ^ 在 java.util.regex.Pattern.error(Pattern.java:1924) 在 java.util.regex.Pattern.accept(Pattern.java:1782) 在 java.util.regex.Pattern.group0(Pattern.java:2857) 在 java.util.regex.Pattern.sequence(Pattern.java:2018) 在 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(Pattern.java:1022) 在 java.lang.String.replaceFirst(String.java:2119) 在 Solution.isUnique(Solution.java:12) 在 Main.main(Main.java: 11)
注意: 因为你没有提到你使用的编程语言。我认为它是 C#。
解决方案:
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++) {
int count = str.Split(Character.ToString((char) i)).Length - 1;
if(count>0)
return false;
}
}
}
问题是 replaceFirst 的第一个参数是一个正则表达式。所以它对 \
、^
、.
和其他人造成了严重破坏。为此,您可以使用:
str = str.replaceFirst(Pattern.quote(s), "");
这将从字符 "("
生成模式 "\("
。
最后简单地 return:
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。