打印给定字符串中的所有可能的子字符串,而不重复字符

时间:2015-12-03 09:58:26

标签: java string

我发现这里的子串程序只打印最大的子串。 但我试图编码打印给定字符串中的所有可能的子串,并在所有那些子字符串中最大的子字符串也打印在console.so请任何人可以帮助我这样做而不使用String方法 我尝试了这个程序,但我收到的字符串没有重复下面的字符

public class SubSring {
     static Scanner sc = new Scanner(System.in);
        static String str = sc.nextLine();

        public static void main(String[] args) {
           String store="";
            for (int i = 0; i < str.length(); i++) {
                if (store.indexOf(str.charAt(i))<0) {
                    store = store+str.charAt(i);
                }
            }
            System.out.println("Result word " +store);

        }

    }

1 个答案:

答案 0 :(得分:0)

您目前拥有的内容会遍历str中的所有字符,如果字符串中当前不存在,则将其添加到store。因此store基本上是str的副本,删除了重复项。

为了获得str的所有可能子字符串,您需要将store更改为字符串集合。 LinkedList可能是一个合适的选择,因为您不知道会有多少个子串,这样您就可以轻松添加任意数量的结果。

所以现在你有一个地方可以把你需要的结果找到所有可能的子串。要做到这一点,你需要两个循环。一个将确定子字符串的起始位置,另一个将确定结束位置。这两个循环的索引之间的所有内容都是一个有效的子字符串,您可以将其添加到结果列表中。

因此,您的主要方法应包含以下内容:

        List<String> store = new LinkedList<String>();
        for (int i=0; i< str.length(); i++) {
            String substring = String.valueOf(str.charAt(i));
            // This is a valid substring so add to results
            store.add(substring);
            // Loop through the rest of the characters in str adding each
            // character to the substring variable.
            for (int j=i+1; j<str.length(); j++) {
               if (substring.indexOf(str.charAt(j)) < 0) {
                  substring += str.charAt(j);
                  // Add each substring to list of results
                  store.add(substring);
               }
            }
        }

然后,您可以遍历store中的每个字符串并将其打印出来。

在现实世界中,您可能需要存储在集合中的可能子字符串以进行进一步处理,但如果您的要求是简单地打印出每种可能性,您可以在没有这样的列表的情况下执行此操作:

           for (int i=0; i< str.length(); i++) {
                String substring = String.valueOf(str.charAt(i));
                // This is a valid substring so print to console
                System.out.println(substring);
                // Loop through the rest of the characters in str adding each
                // character to the substring variable.
                for (int j=i+1; j<str.length(); j++) {
                  if (substring.indexOf(str.charAt(j)) < 0) {
                    substring += str.charAt(j);
                    // Each of these is a valid substring so print to console
                    System.out.println(substring);
                  }
                }
            }