실행 길이로 인코딩된 소문자 문자열(예:s)로 구성하는 반복자 클래스를 정의하려는 경우 이 반복자를 위한 두 가지 함수가 있습니다.
- next() 반복자에서 다음 요소를 찾습니다.
- hasnext() 다음 요소가 있는지 여부를 확인합니다.
따라서 입력이 s ="2b1a"와 같으면 s로 객체를 구성한 다음 next(), hasnext(), next(), next(), hasnext()를 호출하면 출력은 "b"가 됩니다. , 참, "b", "a", 거짓.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 생성자를 정의합니다. 시간이 걸립니다
- 출력:=새 목록
- num :=빈 문자열
- s의 각 i에 대해 다음을 수행합니다.
- 내가 알파벳이면
- 출력 끝에 숫자 삽입
- 출력 끝에 i 삽입
- num :=빈 문자열
- 그렇지 않으면
- num :=num + i
- 내가 알파벳이면
- next() 함수를 정의합니다.
- hasnext()가 참이면
- count :=출력[0]
- 문자:=출력[1]
- count :=count - 1
- 카운트> 0이면
- 출력[0] :=출력[0] - 1
- 그렇지 않으면
- 출력 :=출력[인덱스 2에서 끝까지]
- 반환 편지
- hasnext() 함수를 정의합니다.
- 출력 크기가 0이 아니면
- 참 반환
- 거짓을 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class RunLengthIterator:def __init__(self, s):self.output =[] num ="" for i in s:if i.isalpha():self.output.append(int(num)) self.output .append(i) num ="" else:num +=i def next(self):if self.hasnext():count =self.output[0] letter =self.output[1] count -=count if 1> 0:self.output[0] -=1 else:self.output =self.output[2:] return letter def hasnext(self):if len(self.output) !=0:return True return Falses =" 2b1a"obj =RunLengthIterator(s)print(obj.next())print(obj.hasnext())print(obj.next())print(obj.next())print(obj.hasnext())사전>입력
"2b1a"obj =RunLengthIterator(s)obj.next()obj.hasnext()obj.next()obj.next()obj.hasnext()출력
bTruebaFalse