用于确定字符串是否具有所有唯一字符的算法

时间:2015-04-09 23:28:33

标签: java algorithm java.util.scanner

我编写了这个算法来确定一个字符串是否包含所有唯一字符,但它给了我一些错误。任何人都可以帮助我改进代码。

我错误地认为我正在复制uniquechar1方法,但我将其传递给if语句。

package nospacesinstrings;
import java.util.Scanner;

public class uniquechar {

    public static boolean uniquechar1(String s) {

        if (s == null || s.length() > 0 ) {
            return false;
        }

        for (int i = 0 ;i < s.length();i++) {
            for (int j = s.length() ;j > 0;j--) {
                if (i == j)
                   return false;
                else 
                   return true;
            }
        }
    }

    public static void main(String[] args) {

        String s ;
        System.out.println("Enter the string ");
        Scanner in = new Scanner(System.in);
        s = in.nextLine(); 
        if (uniquechar1(s) == true) {
            System.out.println("String has all the unique characters ");
        } else {
            System.out.println("String does not have all the unique characters ");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您在顶部的检查向后看。我认为你打算放s.length() < 1而不是s.length() > 0

在迭代字符串之前,您还要返回一个值。如果迭代完整字符串而不返回true

,则只应返回false

此外,您的双循环将始终最终将每个字符与自身进行比较,因此该方法将返回false。要使用for循环执行此操作,您需要在到达当前检查的索引之前停止。

for (int i = 0 ;i < s.length();i++){
    for (int j = s.length() ;j > i;j--){
        if (i == j )
        {return false ;}
    }
return true;

你也可以通过收集字符来避免遍历字符串两次。像这样:

Stack<char> stack = new Stack<char>();
for (int i = 0 ;i < s.length();i++){
        if (stack.Contains(s[i]))
        {return false ;}
        stack.Push(s[i]);
    }
return true ;

最后,如果你应该研究角色比较。你是否想要失败,如果有任何两个角色,即使它们是不同的情况(即A == a或A!= a)?

答案 1 :(得分:-1)

此算法应该有效。我假设字符串中没有数字。 (编辑正确的代码)。

public static boolean uniquechar1(String s) 
{
    if (s == null || s.length() == 0 )
        return true;
    // make sure no letter in alphabet occurs twice in the string.
    boolean[] letters = new boolean[26];
    s = s.toUpperCase();
    s = s.replaceAll(" ", "");
    for (int i = 0; i < s.length(); i++)
    {
        char ch = s.charAt(i);
        ch = (char) (ch - 'A');

        if (letters[ch] == true)
            return false;
        else
            letters[ch] = true;
    }

    return true;
}

这是一种测试方法。

public static void main(String[] args)
{
    System.out.println( uniquechar1("Hello World!") );
    System.out.println( uniquechar1("A A") );   
    System.out.println( uniquechar1("ABC") );   
}  

输出:

false  
false  
true