【问题标题】:Java - For Loop to display all Unique SubstringsJava - For 循环显示所有唯一子字符串
【发布时间】:2012-01-01 20:09:49
【问题描述】:

我编写了以下 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);
        }
    }
}

【问题讨论】:

    标签: java string for-loop


    【解决方案1】:

    试试下面的代码。它应该可以根据您的要求工作。

    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,然后将 Set 添加回 ArrayList

    【讨论】:

      【解决方案2】:

      使用一组来记住您已经看过的内容。对于长度为 n 的任何字符串,您大约有 (n^2)/2 个子字符串,因此 Set 的大小将受到限制。

      【讨论】:

        【解决方案3】:

        我们可以在不使用数组列表的情况下直接执行此操作,这会使您接受的上述答案有点混乱。检查我的代码。

        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);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2013-11-02
          • 2023-03-31
          • 2019-05-05
          • 2013-03-07
          • 1970-01-01
          • 2020-10-16
          • 1970-01-01
          • 2014-08-05
          • 2017-04-18
          相关资源
          最近更新 更多