Rotation of String

本文介绍了一种利用isSubstring方法检查一个字符串是否为另一个字符串的旋转的方法。通过将原字符串连接自身,再使用isSubstring方法判断目标字符串是否存在于其中,以此来高效地解决该问题。
Problem:

Assume you have a method isSubstring which checks if one word is a substring of
another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring (i.e., “waterbottle” is a rotation of “erbottlewat”).

这个问题的trick就是将两个原字符串拼起来,然后检测。。。
题目描述 The cows are experimenting with secret codes, and have devised a method for creating an infinite-length string to be used as part of one of their codes. Given a string s s, let F ( s ) F(s) be s s followed by s s "rotated" one character to the right (in a right rotation, the last character of s s rotates around and becomes the new first character). Given an initial string s s, the cows build their infinite-length code string by repeatedly applying F F; each step therefore doubles the length of the current string. Given the initial string and an index N N, please help the cows compute the character at the N Nth position within the infinite code string. 奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。 给定一个字符串,每次变换,字符串变成原来长度的两倍,后半部分为前半部分的旋转,(每一次正确的旋转,最后一个字符都会成为新的第一个字符)。也就是说,给定一个初始字符串,之后的每一步都会增加当前字符串的长度。 下面为两次旋转变换。 COW -> COWWCO -> COWWCOOCOWWC 给定初始字符串和索引,请帮助奶牛计算无限字符串中位置N的字符。 输入格式 The input consists of a single line containing a string followed by N N. The string consists of at most 30 uppercase characters, and N ≤ 1 0 18 N≤10 18 . Note that N N may be too large to fit into a standard 32-bit integer, so you may want to use a 64-bit integer type (e.g., a "long long" in C/C++). 第一行输入一个字符串。该字符串包含最多30个大写字母,并 N ≤ 1 0 18 N≤10 18 。 第二行输入N。请注意,数据可能很大,放进一个标准的32位整数可能不够,所以你可能要使用一个64位的整数类型(例如,在C / C++ 中是 long long)。 输出格式 Please output the N Nth character of the infinite code built from the initial string. The first character is N = 1 N=1. 请输出从初始字符串生成的无限字符串中的位置的字符。第一个字符是 N = 1 N=1.。 样例 #1 样例输入 #1 COW 8 样例输出 #1 C 提示 In this example, the initial string COW expands as follows: COW -> COWWCO -> COWWCOOCOWWC 12345678 感谢@y_z_h 的翻译c++代码
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值