Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 단조로운 문자열 그룹의 최소 수를 찾는 프로그램

<시간/>

소문자 문자열 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