소문자 문자열 s가 있다고 가정합니다. 각 부분 문자열이 증가하지 않거나 감소하지 않도록 s가 부분으로 나누어지는 연속적인 부분 문자열의 최소 수를 찾아야 합니다. 예를 들어 문자열이 "pqqqr"이 비감소 문자열이고 "qqqp"가 비증가 문자열인 경우
따라서 입력이 s ="pqrsrqp"와 같으면 출력은 2가 됩니다. "pqrs" 및 "rqp"와 같이 s를 나눌 수 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
s가 비어 있으면
-
0 반환
-
-
마지막 :=s[0]
-
방향 :=1
-
개수 :=1
-
s의 각 문자에 대해 수행
-
char> 마지막이면
-
방향이 1과 같으면
-
방향 :=0
-
-
그렇지 않으면 방향이 2와 같을 때
-
방향 :=1
-
개수 :=개수 + 1
-
-
-
그렇지 않으면 char
일 때 -
방향이 1과 같으면
-
방향 :=2
-
-
그렇지 않으면 방향이 0과 같을 때
-
방향 :=1
-
개수 :=개수 + 1
-
-
-
마지막 :=문자
-
-
반환 횟수
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
def solve(s): if not s: return 0 last = s[0] direction = 1 count = 1 for char in s: if char > last: if direction == 1: direction = 0 elif direction == 2: direction = 1 count += 1 elif char < last: if direction == 1: direction = 2 elif direction == 0: direction = 1 count += 1 last = char return count s = "pqrsrqp" print(solve(s))
입력
"pqrsrqp"
출력
2