字符串-旋转词

  |     |  
阅读次数:

题目

如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。

给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。

测试样例:

“cdab”,4,”abcd”,4

返回:true

思路

  1. 首先判断lena和lenb是否相同
  2. 如果长度相同,则生成A + A的新字符串newA
  3. 使用kmp算法或者别的查找子串的方法看newA中是否包含B

下面举例说明,这样做为什么是对的。

Java代码

import java.util.*;

public class Rotation {
    public boolean chkRotation(String A, int lena, String B, int lenb) {

        if (lena != lenb){
            return false;
        }
        String str = A + A;
        // 这里我偷懒了,直接使用indexOf()函数来寻找子串,此函数找不到时会返回-1,找到时返回第一个字符出现的下标
        if (str.indexOf(B) != -1) {
            return true;
        }
        return false;
    }
}

Python代码

# -*- coding:utf-8 -*-

class Rotation:
    def chkRotation(self, A, lena, B, lenb):

        if lena != lenb:
            return False
        str = A + A
        if str.find(B) != -1:
            return True
        else:
            return False

或者可以写成这样

# -*- coding:utf-8 -*-

class Rotation:
    def chkRotation(self, A, lena, B, lenb):

        return lena == lenb and B in A + A

还有一些类似的题目。

题目2

题目3

题目4

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器