여기에 문제가 있습니다. 문자열을 k 문자열의 일부로 연결된 사본으로 표시 할 수있는 경우 문자열을 k 문자열이라고합니다. 예를 들어 "aabaabaabaab"문자열은 동시에 1 문자열, 2 문자열 및 4 문자열이지만 3 문자열, 5 문자열 또는 6 문자열 등이 아닙니다. . 분명히 모든 문자열은 1 문자열입니다.문자열이 반복 루 브릭 인 경우 찾기
문자열 s는 소문자 영문자와 양의 정수 k로 구성됩니다. 당신의 임무는 결과 문자열이 k- 문자열이되도록 문자열 s의 문자 순서를 바꾸는 것입니다.
입력 첫 번째 입력 줄에는 정수 k (1 ≤ k ≤ 1000)가 포함됩니다. 두 번째 줄은 s를 포함하고, s의 모든 문자는 소문자 영어 문자입니다. 문자열 길이 s는 부등식 1 ≤ | s | ≤ 1000, 여기서 | s | 문자열 s의 길이입니다.
출력 결과가 k- 문자열이되도록 문자열 s의 문자를 재정렬하십시오. 단일 출력 라인에 결과를 인쇄하십시오. 솔루션이 여러 개인 경우 그 중 하나를 인쇄하십시오.
해결 방법이 없으면 "-1"(따옴표 제외)을 인쇄하십시오. 그것은 작동해야처럼이 솔루션이 보인다 나에게
k = gets.to_i
str = gets.chomp.split(//)
n = str.length/k
map = Hash.new(0)
map2 = Hash.new(0)
str.each { |i| map[i] += 1 }
x = str.uniq.permutation(n).map(&:join).each do |string|
string.each_char { |c| map2[c] += k }
if map2 == map
puts string*k
exit
end
map2 = Hash.new(0)
end
puts '-1'
하지만 테스트 케이스에 실패
여기 내 코드입니다. 아무도 그 이유를 말할 수 있습니까?
어떤 테스트 케이스에서 실패하고 어떻게 실패합니까? – Patashu
테스트 케이스를 보여 주면 도움이 될 것입니다. –
이것은 끔찍한 짐승처럼 보입니다. k- 문자열의 정의를 이해한다면 각 문자는 k 배의 배수가되어야합니다. 따라서 문자를 정렬하고 해당 발생을 계산하고 각 조건이 만족하는지 확인합니다. 그렇지 않으면 -1을 인쇄하십시오. 그렇지 않으면 하나의 "단위"를 나타내는 문자의 하위 집합을 찾아 무작위로 정렬하고 k 번 반복합니다. – Floris