2017-10-16 15 views
0

가 나는 다음과 같이 주어진 문자열의 모든 문자열을 얻을 수 있습니다 알고있는 문자열의 '반 문자열'모든 문자열과

String inputString = "abcde"; 

java.util.Set<String> substrings = new java.util.TreeSet<>(); 
int strLength = inputString.length(); 
for(int i=0; i<strLength; i++) 
    for(int j=0; j<=strLength-i; j++) 
    substrings.add(inputString.substring(i, i+j)); 

나에게 설정에서 다음과 같은 결과를 얻을 것이다 어떤 :

a, ab, abc, abcd, abcde, b, bc, bcd, bcde, c, cd, cde, d, de, e, 

그러나, 나는 어떻게 든 대신 다음과 같은 목록을 얻으려면 :

a, ab, abc, abcd, abcde, abce, abd, abde, abe, ac, acd, acde, ace, ad, ade, ae, b, bc, bcd, bcde, bce, bd, bde, be, c, cd, cde, ce, d, de, e 

그래서 모든 문자열에 추가하여, 그 사이에 하나 또는 여러 개의 문자를 제거하면 문자열이 필요합니다 (예 : ace을 제거하여 bd).

가장 쉬운 방법은 무엇입니까?

참고 : 모든 문자는 동일한 순서로 유지되어야합니다. 그렇지 않으면 문자열의 모든 순열을 해당 문자열의 모든 하위 문자열과 결합합니다.

+0

를 사용하여 하나 char[i] 삭제 네 글자 출력을위한 올바른 순서

  • 의 편지를 얻을 * "그러나, 나는 대신 다음 목록 뒤에 있어요?" –

  • +0

    @NikolasCharalambidis 나는 그것을 다시 말할 것이다. 그러나 나는 그것이 내가 찾고있는 결과라는 것을 의미했다. 나는 이것을 성취하는 방법을 모르겠습니다. –

    답변

    1

    이 해결책을 확인하십시오. 저의 소프트웨어 엔지니어링 수업 강사가 잠시 동안이 솔루션을 제공해 주셨습니다. TreeSet으로 주문한 세트를 얻을 수 있도록 약간 편집했습니다.

    public static Set<String> stringSubsets(String str) { 
        if (str.isEmpty()) { 
         return new TreeSet<>(Arrays.asList("")); 
        } else { 
         char currentChar = str.charAt(0); 
         String rest = str.substring(1); 
    
         Set<String> combinationsOfRest = stringSubsets(rest); 
         Set<String> result = new TreeSet<>(); 
    
         result.addAll(combinationsOfRest); 
         for (String c: combinationsOfRest) 
          result.add(currentChar + c); 
    
         return result; 
        } 
    } 
    
    +0

    완벽한 감사합니다! 나는 그것을 할 수있을 때 잠깐 대답으로 받아 들일 것이다. –

    0
      는 변경
    1. 당신의 inputString 출력 char[]
    2. 에 : a,b,c,d,e 그냥 같은 두 글자에 대한 for loop
    3. 간단한 출력에 char[i] 인쇄 : 등 AB, AC - 당신 같은 루프에서 루프를 할 그래서 char[i] + char [j]은 하위 문자열이 될 것입니다.
    4. 3 문자 출력 - 3 단계와 같이 루프를 반복합니다. 그러나이 경우 char[] 배열 char[i] and char[j]에서 삭제하십시오. 예 ou는 당신이 * 무엇을 의미합니까 간단한 루프