여기가 문제입니다 (Codeforces에서)문자열에서 연속 된 문자를 모두 제거하는 루비 정규식
폴리 카프는 삶의 의미를 매우 자주 생각합니다. 에디터에서 타이핑 할 때도 그는 이것을 끊임없이합니다. 그가 우울하게하기 시작할 때마다 그는 한 번만 눌러야 할 열쇠를 더 이상 완전히 집중시키지 않고 반복적으로 누를 수 없습니다. 예를 들어 "어떻게 지내세요?"대신 "hhoow aaaare yyoouu"를 입력 할 수 있습니다.
Polycarp는 이러한 오류를 수정하는 프로세스를 자동화하기로 결정했습니다. 그는 텍스트 편집기에 플러그인을 작성하여 동일한 연속 된 문자 쌍 (텍스트가있는 경우)을 제거하기로 결정했습니다. 물론, 이것은 폴리 카프가 필요로하는 것과 정확히 똑같지는 않지만, 뭔가에서 시작해야합니다!
도움말 Polycarp를 사용하고 메인 플러그인 모듈을 작성하십시오. 프로그램은 문자열에서 동일한 문자의 모든 쌍을 연속적으로 제거해야합니다. 제거한 후에 새로운 쌍이 나타나면 프로그램에서이를 제거해야합니다. 전문적으로 그 작업은 다음과 동등해야합니다. 문자열에 연속되는 동일한 문자 쌍이 포함되어 있지만 쌍을 삭제해야합니다. 순서가 동일한 결과로 이어 지므로 연속 된 동일한 문자를 삭제하는 순서는 임의의 순서로 수행 할 수 있습니다.
여기 내 해결책이 있습니다. 어떤 이유로 굉장히 큰 테스트 케이스가 실패합니다. 내 것은 그것이 예상 한 것보다 더 많은 글자를 없애는 것 같습니다. 이 정규 표현식이 올바르지 않습니까?
str = gets.chomp
while str =~ /(.)\1/
str.gsub!(/(.)\1+/,'')
end
puts str
EDIT -이 솔루션은 모든 연속적인 문자 그룹을 제거하기 때문에 작동하지 않습니다. 중복을 제거해야합니다.
str = gets.chomp
while str =~ /(.)\1/
str.gsub!(/(.)\1/,'')
end
puts str
정규식을 사용해야합니까? 짜내는 방법 어때요? http://www.ruby-doc.org/core-1.9.3/String.html#method-i-squeeze – squiguy
잘 생겼지 만 복제본 중 하나만 삭제합니다. 중복을 모두 삭제하고 싶습니다. 따라서 "aab"은 "b"가됩니다 – ordinary
하지만 'aaab'은 어떻게됩니까? 그것은 "ab"또는 "b"가되어야합니까? –