LeetCode 796. Rotate String

5138 단어 KotlinLeetCodetech

Question

  • https://leetcode.com/problems/rotate-string/
  • 4
    Given two strings s and goal, return true if and only if s can become goal after some number of shifts on s.
    
    A shift on s consists of moving the leftmost character of s to the rightmost position.
    
    For example, if s = "abcde", then it will be "bcdea" after one shift.
    
    두 문자열 s와gooal을 주었을 때 s로 몇 번 이동한 후에 s가goal이 될 수 있을 때만 진짜로 되돌아온다.
    s의 위치 이동은 s의 왼쪽 문자를 오른쪽으로 이동하는 것이다.
    예를 들어 s="abcde"라면, 1번으로 "bcdea"로 이동합니다.

    Code


    class Solution {
        fun rotateString(s: String, goal: String): Boolean {
            if (s.length != goal.length) return false
            val b = StringBuilder(s)
    	for (char in s) {
    	    b.deleteCharAt(0)
    	    b.append(char)
    	    if (b.toString().contains(goal)) return true
    	}
    	return false
        }
    }
    
    class Solution {
        fun rotateString(s: String, goal: String): Boolean {
            return s.length == goal.length && (s + s).contains(goal)
        }
    }
    
    문자열의 결합에서 String+String은 매번 대상을 생성하는데, 비용이 되기 위해 StringBuilder를 사용하는 것은 고정적이다
    문자열 s를 StringBuilder로 복사하여 시작과 끝을 삭제하는 동시에
    골과 일치해서 끝냅니다.
    두 번째는 솔루션 소개
    같은 문자열 두 개를 만들면 실제로는 찾을 수 있다
    똑똑하다고 생각했지만 시간 계산량은 O(n^2)로 바뀌었다.확실하다
    실행해보면 이쪽 성적이 더 좋아...

    Profile


  • StringBuilder
  • Runtime: 144 ms
  • Memory Usage: 33.8 MB

  • s+s.contain
  • Runtime: 140 ms
  • Memory Usage: 35.4 MB
  • Submission

  • https://leetcode.com/submissions/detail/592032941/
  • https://leetcode.com/submissions/detail/592033630/
  • 좋은 웹페이지 즐겨찾기