問題1.8

世界で闘うプログラミング力を鍛える150問


これもまぁ解けたけど、面接とかでいきなり解けって言われたら思いつかないかも。
いやー、思った以上に脳が腐ってきてる。笑。

問題

片方の文字列が、もう片方の文字列の一部分になっているかどうかを調べるメソッド「isSubstring」が使えると仮定します。2つの文字列s1とs2が与えられたとき、isSubstringメソッドを一度だけ使ってs2がs1を回転させたものかどうかを判定するコードを書いてください(たとえば、「waterbottle」は「erbottlewat」を回転させたものになっています)。

#encoding: utf-8


def is_rotated_strs(str1, str2):
    '''
    str2がstr1を回転させた文字列かどうかをチェックする関数
    >>> is_rotated_strs('waterbottle', 'erbottlewat')
    True
    >>> is_rotated_strs('waterbottle', 'erbottlewta')
    False
    '''
    # str1を2つ連結。str2を含めば、str1を回転させた文字列。
    if is_substring(str1 + str1, str2) is True:
        return True
    else:
        return False
    

def is_substring(str1, str2):
    '''
    str2がstr1の一部分であるかどうかをチェックする関数
    >>> is_substring('helloworld', 'hello')
    True
    >>> is_substring('helloworld', 'helo')
    False
    >>> is_substring('helloworld', 'olleh')
    True
    '''
    # str2がstr1の一部分かをチェック
    for counter in range(0, len(str1) - len(str2)):
        if str1[counter:counter + len(str2)] == str2:
            return True
        elif str1[counter:counter + len(str2)] == str2[::-1]:
            return True
    return False


def _test():
    import doctest
    doctest.testmod()


if __name__ == '__main__':
    _test()