그래서, 나는 주어진 문자열의 주어진 길이의 모든 가능한 단일 부분 문자열을 생성하는 법을 최근에 배웠다. 이제, 주어진 길이의 가능한 모든 DISTINCT 문자열을 찾으려고합니다. 그 의미는 문자열에 모든 별개의 문자가 있다는 것입니다. 명령은 중요하지 않습니다.구별되는 문자 자바의 주어진 문자열로부터 주어진 길이의 문자열
public static void distinctStrings(int maxLength, char [] alphabet, String news){
//converts char array to a string builder so you can mutate it
String a = new String (alphabet);
StringBuilder nAlphabet = new StringBuilder(a);
//if it is max
if(news.length()==maxLength) System.out.println(news);//full.add(news);
//describes the way to get the distinct string:
else{
//if alphabet.length>0 to avoid errors when the alphabet length has reached 0, probably could just do a while loop
if(alphabet.length>0){
for(int i = 0; i < alphabet.length; i++) {
String oldCurr = news;
news += nAlphabet.charAt(i);
//deletes char so it can't be used again
nAlphabet.deleteCharAt(i);
String c = nAlphabet.toString();
char[] b = c.toCharArray();
//reprocesses the strings.
distinctStrings(maxLength,b,news);
news = oldCurr;
}
}
}
편집 : 지금까지 내가 무엇을 가지고 그래서 코드가 작동하지 않습니다, 나는 이유를 모르겠어요. "AB AB"를 출력하고 그게 전부입니다. 나는 distinctStrings (2, { 'A', 'B', 'C'}, "")로 실행했습니다. 나는 또한 그것을 최적화하는 방법에 대한 조언을 주시면 감사하겠습니다. 내가 코딩하기를 원하는 일반적인 생각은 distinctStrings (2, { 'A', 'B', 'C'}, '')를 연결하면 AB, AC, BC를 출력한다고 가정합니다. 명령은 중요하지 않아야합니다. 반면에 가능한 모든 문자열을 출력하고 싶다면 AA, BB 및 CC와 같은 문자열을 포함 할 것입니다. 별개의 문자열이라는 용어는 문자열에 포함 된 문자가 모두 다른 문자열을 의미합니다. "news"문자열 (시작 부분에 그냥 비어 있음)을 사용하는 이유는 시작 지점이므로 메서드를 자체적으로 실행할 수 있으며 새 문자열 "news"에 메서드를 실행하기 때문입니다.
은 그냥'HashSet의'에 모두 넣어. –
특정 길이의 고유 한 문자열을 저장하기 위해 최적의 루프가 무엇인지 묻고 있습니까? –
아니요, 코드가 작동하지 않습니다. 그것은 "AB AB"를 출력하고 그게 전부입니다. 나는 그것을 수정하고 아마도 그것을 최적화하는 방법을 요구하고있다. 지금은 비효율적입니다. 해시 셋 문자열이 무엇인지 찾아 볼 것입니다. 힌트를 가져 주셔서 감사합니다. – user4500882