Java - для цикла для отображения всех уникальных подстрок - PullRequest
1 голос
/ 02 января 2012

Я написал следующее для цикла, чтобы отобразить все подстроки из предоставленного слова. Тем не менее, одно из требований относится только к слову «отображать уникальные подстроки». Если бы 'мама' передавала следующий код, она бы отображала подстроки длины один как '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 голос
/ 02 января 2012

Попробуйте следующий код. Он должен работать в соответствии с вашими требованиями.

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

1 голос
/ 02 января 2012

Используйте Набор, чтобы запомнить то, что вы уже видели.Для любой строки длины n у вас есть примерно (n ^ 2) / 2 подстроки, поэтому размер набора будет ограничен.

0 голосов
/ 02 февраля 2017

Мы можем сделать это напрямую, не используя 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...