2015-11-23 120 views
0

该代码非常简单。它会检查一次所有字符并取代它们的第一次出现。但是,输入=“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; 
    } 
} 

编辑

我改变了代码。现在,它引发错误输入

[email protected]#$%^&*()_+ 

错误:

异常在线程 “主” java.util.regex.PatternSyntaxException:邻近索引1(^在未关闭的java.util.regex.Pattern中组。错误(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)at java.util.regex.Pattern.expr(Pattern.java:1964)at java.util.regex.Pattern.compile(Pattern.java:1665)at java.util.regex。模式。(Pattern.java:1337)at java.util.regex.Pattern.compile(Pattern.java:1022)at java.lang.String.replaceFirst(String.java:2119)at Solution.isUnique(Solution.java: 12)在Main .main(Main.java:11)​​

+0

截至目前它将所有字符替换为“”(空)和atlast'str.length()总是0 –

+0

@TejuMB我的想法是检查每个字符一次并替换它的第一次出现。我仍然不明白长度总是如何0 –

回答

0

的问题是,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工作。

+1

你的答案很棒。虽然模式方法不适用于我正在练习问题的lintcode。反正第二部分工作得很好。 –

0

注意:正如你还没有提到你使用的编程语言。我认为它是C#。

SOLUTION:

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; 
     } 
     } 
    } 
+0

语言是java。我不熟悉C#所以我不明白你在这里做了什么 –

+0

哦,我不熟悉java标准函数的字符串。 –

相关问题