有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字符串Java For循环以显示所有唯一的子字符串

我编写了以下for循环来显示所提供单词的所有子字符串。但是,其中一个要求是单词对一仅显示唯一的子字符串。如果“mom”给了下面的代码,它会将长度为1的子字符串显示为“m”、“o”和“m”,并给出“m”的副本。如何确保只打印唯一的子字符串

public static void allUniqueSubStrings(String str) {
    for (int i = 1; i <= str.length(); i++) { 
        for (int j = 0; j + i <= str.length(); j++) { 
            String s = str.substring(j, i+j); 
            System.out.println(s);
        }
    }
}

共 (3) 个答案

  1. # 1 楼答案

    我们可以不使用arraylist直接进行操作,这会使您接受的上述答案有点混乱。检查我的代码

    public class Subst {
        public static void main(String args[]) {
            String st;
            HashSet<String> hs = new HashSet<String>();
            Scanner in = new Scanner(System.in);
            st = in.nextLine();
            int length = st.length();
            for (int i = 0; i < length; i++) {
                for (int j = i + 1; j <= length; j++) {
                    hs.add(st.substring(i, j));
                }
            }
            System.out.println(hs);
        }
    }
    
  2. # 2 楼答案

    请尝试以下代码。它应该按照你的要求工作

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Scanner;
    
    final public class Main
    {
        public static void main(String...args)
        {
            String string, sub;
            ArrayList<String>al=new ArrayList<String>();
    
            int i, c, length;
    
            Scanner in = new Scanner(System.in);
            System.out.print("Enter a string to print it's all unique substrings:->");
            string  = in.nextLine();
    
            length = string.length();
    
            System.out.print("Substrings of \""+string+"\" are :->");
    
            for(c=0;c<length;c++)
            {
                for(i=1;i<=length-c;i++)
                {
                    sub = string.substring(c,c+i);
                    al.add(sub);
                }
            }
    
            HashSet hs = new HashSet();
            hs.addAll(al);
            al.clear();
            al.addAll(hs);
    
            for(String str:al)
            {
                System.out.println(str);
            }
        }
    }
    

    删除重复元素的最简单方法是将内容添加到不允许重复的Set中,然后将集合添加回ArrayList

  3. # 3 楼答案

    用一套来记住你已经看到的东西。对于长度为n的任何字符串,您大约有(n^2)/2个子字符串,因此集合的大小将以这样的方式有界