1. 程式人生 > >【Leetcode_總結】 796. 旋轉字串

【Leetcode_總結】 796. 旋轉字串

Q:

A 的旋轉操作就是將 A 最左邊的字元移動到最右邊。 例如, 若 A = 'abcde',在移動一次之後結果就是'bcdea' 。如果在若干次旋轉操作之後,A 能變成B,那麼返回True

示例 1:
輸入: A = 'abcde', B = 'cdeab'
輸出: true

示例 2:
輸入: A = 'abcde', B = 'abced'
輸出: false

思路:利用雙指標,A 的旋轉操作就是將 A 最左邊的字元移動到最右邊,這個操作我就把兩個字串相加,加和之後滑動指標,如果能與B匹配 則True 否則 False 。

class Solution:
    def rotateString(self, A, B):
        """
        :type A: str
        :type B: str
        :rtype: bool
        """
        if len(A) != len(B):
            return False
        if A=='' and B=='':
            return True
        slow = 0
        fast = len(B)
        A = A + A
        while(fast < len(A)):
            if A[slow:fast] == B:
                return True
            else:
                slow+=1
                fast+=1
        return False

AC記錄:

結果不是很理想,看下優秀示例吧~

class Solution:
    def rotateString(self, A, B):
        """
        :type A: str
        :type B: str
        :rtype: bool
        """
        if A == B: return True
        elif len(A) != len(B): return False
        
        strlen = len(A)
        for i in range(strlen):
            B = B[-1]+B[0:strlen-1]
            if A == B: return True
            
        return False

這個思路也很清晰,比較兩個字串,和字串長度,然後移動字串的時候,這個還是有些意思 B = B[-1]+B[0:strlen-1] 這樣就可以在原地移動字串了。