循环移动字符串

  这个问题的意思就是给定两个字符串s1和s2,判断s2是否包含在s1循环移位得到的字符串中。

  这个题的最简单的一种思路就是对s1进行循环穷举,对于得到的每种情况,都进行判断s2是否包含在其中。

  不过如果s1的字符串很长,那么穷举的时间复杂度是相当高的。因此可以换一种思路。

  新的解决办法相当的巧妙,假设我们在s1字符串前面再加入一个跟s1登场的空间,每当s1循环移动之后,就把移到末尾的字符在前面空间中加一个,那么情况如下所示:

  ABCD----ABCDA----ABCDAB----ABCDABC----ABCDABCD

  如果s2在s1的循环移位中,那么一定就在s1s1中。显然我们只需要多一个n的空间,即可将时间复杂度降到很低。

循环移动字符串

时间: 2024-10-20 23:14:29

循环移动字符串的相关文章

C++/CLI 编程——使用 for each 循环存取字符串中的字符

除 ISO/IEC C++ 中定义的3种循环语句以外,C++/CLI 还提供了for each 语句.在C++/CLI 中,for each 循环的效率比其他几种形式的循环效率更高. #include"stdafx.h" using namespace System; int main(array <System::String ^> ^args) { int vowels(0), consonants(0); String^ proverb(L"A nod is

【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map

测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三</span>"); freemakerUtil.print(root, "06.ftl"); freemakerUtil.fprint(root, "06.ftl", fn+"06.html"); } catch (Except

杂题之循环移动字符串

1.问题:一个m个字符的字符串,'循环' 向左或向右移动n(n <= m)位,求移动后的字符串.例如abcdefg 左循环移动3位 -> defgabc, 又循环移动三位 -> efgabcd. 2.实现方法很多,最直接但是效率很低的方法是挨个移动字符元素,类似移动数组.这里介绍一个技巧来实现, 以循环左移n位为例: 1).首先翻转前n位,此时你可以伸出右手,手心对着你自己,假设此时从无名指到大拇指标号为1,2,3,4,5:然后翻转你的右手,让手心对外,则此时为5,4,3,2,1.翻转前

for循环遍历字符串的还有一种方法

遍历字符c,让它各自等于字符串数组chars里面的各个字符.然后运行以下的语句,当c被赋值为chars里面全部字符各一次后.就会退出这个循环. 通常我们遍历字符串数组用 for(int i=0;i<array.length;i++){ array[i]; } 事实上使用for(String c:valueArray)更加方便 当中valueArray为字符串的数组,c为数组中的每一个字符串变量,直接訪问就可以 char[] cArray = num.toCharArray(); for (cha

php中循环实现(字符串,对象,或者数组)编码相互转换

/** * 循环实现编码互转 * * @param string $param(字符串,对象,或者数组),$currCharset当前编码,$toCharset期望编码 * @return 参数类型 */ function zhandi_iconv($param,$currCharset,$toCharset){ if ($currCharset != $toCharset){     if (is_string($param)){        return iconv($currCharse

for循环遍历字符串的另一种方法

遍历字符c,让它分别等于字符串数组chars里面的各个字符,然后执行下面的语句,当c被赋值为chars里面所有字符各一次后,就会退出这个循环. 通常我们遍历字符串数组用 for(int i=0;i<array.length;i++){ array[i]; } 其实使用for(String c:valueArray)更加方便 其中valueArray为字符串的数组,c为数组中的每个字符串变量,直接访问即可 char[] cArray = num.toCharArray(); for (char c

python之条件判断、循环和字符串格式化

1. python的条件判断:if和else 在条件判断中可以使用算数运算符 等于:== 不等于:!= 大于:> 小于:< 大于等于:>= 小于等于:<= 示例1: username=input('请输入用户名:')passwd=input('请输入密码:')if username == 'mpp' and passwd == '123': print('登录成功')else: print('用户名或密码错误') 示例2:if里可以嵌套if,也可以使用elif score=int(

sql语句循环截取字符串

测试环境 : mssql2016 express 需求 : 拆分字符串执行insert 思路 : 在循环中截取分隔符之间的字符串.起止点位置计算    起点从0开始startIndex,查找第一个分隔符位置endIndex.下一次循环时,将endIndex+1作为起来,再查找其之后的第一个分隔符位置.直到查找到最后一个分隔符位置.   当找到最后一个分隔符位置时,下一个止点位置为0循环会结束,而处理不到最后分隔符与字符串结尾处的那个子串,即最后一个单元.所以源字符串起点不含分隔符,但结束时包含.

Python的语言基础总结(二)之循环与字符串操作

一.循环和分支 1. 条件分支语句 if 条件: 代码块 else: 代码块 2. 循环语句之while 思考1:求1+2+3+....+10的值 sum = 0 num = 1 while num < 101: sum += num num += 1 print(sum) for 循环 for 语句: 代码块 二.字符串操作 1.字符串的拼接 使用加号进行链接 #字符串的链接,通过"+"进行链接 s1 = 'welcome' s2 = 'to guangzhou' print(