2012-04-12 1 views
1
public class StringPermutation {  
    public static List<String> getPermutation(String input) { 
     List<String> collection = null; 
     if (input.length() == 1) { 
      collection = new ArrayList<String>(); 
      collection.add(input); 
      return collection; 
     } else { 
      collection = getPermutation(input.substring(1)); 
      Character first = input.charAt(0); 
      List<String> result = new ArrayList<String>(); 
      for (String str : collection) { 
       for (int i = 0; i < str.length(); i++) { 
        String item = str.substring(0, i) + first 
          + str.substring(i); 
        result.add(item); 
       } 
       String item = str.concat(first.toString()); 
       result.add(item); 
      } 
      return result; 
     } 
    } 

    public static void main(String[] args) { 
     List<String> test = StringPermutation.getPermutation ("CAT"); 
     System.out.println (test); 
    } 
} 

위의 코드는 주어진 문자열을 바꾸어줍니다. 예를 들어 cat이 주어지면 [cat, act, atc, cta, tca, tac]이 반환됩니다.이 코드는 우수하지만 내 코드를 편집하여 문자의 하위 집합도 표시 할 수 있습니다 (예 : cat, act, atc, cta, tca, tac] and [at, ta, tc, ca, ac, ct, c, a, t)?모든 조합을 문자로 바꿉니다.

내가 무엇을 요구하는지 이해하기를 바랍니다. 당신이 이해 못하면 내가 더 설명해 줄 것을 알리라. 고마워, 고마워. 당신이 "고양이" 하위 집합이 될 것입니다 그래서 만약

Set<String> subsets; 

public void generateSubsets(String current, String left) { 
    if (left.length() == 0) { 
     subsets.add(current); 
    } else { 
     generateSubsets(current, left.substring(1)); 
     generateSubsets(current + left.charAt(0), left.substring(1)); 
    } 
} 

List<String> allPermutations(String word) { 
    subsets = new HashSet<String>(); 
    generateSubsets("", word); 
    List<String> result = new ArrayList<String>(); 
    for (String subset : subsets) { 
     result.addAll(StringPermutation.getPermutation(subset)); 
    } 
    return result; 
} 

:

+0

숙제? . 태그를 붙이십시오. 그건 그렇고,이 질문은 여러 번 여기에 답변을 믿습니다하지만 난 너 자신 (그것은 hw 뒤에 포인트입니다) – Pepe

+0

lol 이것은 숙제가 안드로이드 애플 리케이션을 만드는 오전 노력하고 노력하는 것이 좋습니다 .. 이것은 program.i의 단지 섹션은 그것을 테스트하기 위해 APK를 보낼 수 있지만 아직 완료되지 않았습니다. 그 대답을 할 수 있다면 링크를 넣어주십시오. – ImGeorge

답변

1

는 당신이 첫 글자의 모든 부분 집합을 생성하고 주어진 집합의 모든 순열을 생성 할 수 있다고 생각합니다 "", "C", " a ","t ","ca ","ct ","tc ","cat " 그리고 모든 하위 집합에 대해 순열을 얻습니다.
효율성과 관련하여 최상의 솔루션은 아니지만 개선 할 수 있습니다.

+0

Java가 힙 공간 오류를 일으키는 것은 효율적이지 않습니다. 그것을 텍스트 파일로 보낼 생각입니다. 당신이 제안을 가지고 있다면 – ImGeorge

+0

감사하지만, 효율적이고 신뢰할 수있는 안드로이드 애플 리케이션을 구축 알려줘 – ImGeorge