2015-11-23 123 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標準函數的字符串。 –

相關問題