[编程之美-03]字符串移位包含的问题
2017-05-09 22:19
148 查看
[版权说明]
编程之美系列算法题集参考:
左程云 著《程序员代码面试指南IT名企算法与数据结构题目最优解》
July 著《编程之法面试和算法心得》
何海涛 著《剑指offer》
微软编程之美小组 著《编程之美》
部分题目摘选PAT、HDOJ、POJ以及各大互联网公司Google,BAT等面试题集。
博主采用C/C++语言实现(有些题目的解法进行优化)。希望编程之美系列博文没有侵犯版权!(若侵权,请联系我,邮箱:1511082629@nbu.edu.cn )
欢迎大家转载分享,编程之美系列算法题集,会不定期更新。鉴于博主本人水平有限,如有问题。恳请批评指正!
[Problem Description]
给定两个字符串s1和s2(s1和s2用空格隔开,左边字符串是s1,右边字符串是s2),要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含。
[Sample Input]
AABCD BCDAA
ABCD ACBD
[Sample Output]
true
false
基本解法:我们可以把s1循环移位的所有可能都枚举出来,然后逐一与s2进行比较。即,转换常见的枚举算法问题,与[编程之美-01]字符串的旋转问题 基本解法原理相似。
代码如下:
时间复杂度:O(m*n), 空间复杂度:O(1)
高效解法:小技巧,用空间去换时间,原本s1=AABBCD,我们将s1=s1+s1赋值给s1,就s1的结果为AABBCDAABBCD。会发现s1所有的循环移位的可能都包含在新s1中,直接在s1种找s2出现的位置,即可解决。
代码如下:
时间复杂度:O(2*m), 空间复杂度:O(1)
编程之美系列算法题集参考:
左程云 著《程序员代码面试指南IT名企算法与数据结构题目最优解》
July 著《编程之法面试和算法心得》
何海涛 著《剑指offer》
微软编程之美小组 著《编程之美》
部分题目摘选PAT、HDOJ、POJ以及各大互联网公司Google,BAT等面试题集。
博主采用C/C++语言实现(有些题目的解法进行优化)。希望编程之美系列博文没有侵犯版权!(若侵权,请联系我,邮箱:1511082629@nbu.edu.cn )
欢迎大家转载分享,编程之美系列算法题集,会不定期更新。鉴于博主本人水平有限,如有问题。恳请批评指正!
[Problem Description]
给定两个字符串s1和s2(s1和s2用空格隔开,左边字符串是s1,右边字符串是s2),要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含。
[Sample Input]
AABCD BCDAA
ABCD ACBD
[Sample Output]
true
false
基本解法:我们可以把s1循环移位的所有可能都枚举出来,然后逐一与s2进行比较。即,转换常见的枚举算法问题,与[编程之美-01]字符串的旋转问题 基本解法原理相似。
代码如下:
#include<iostream> #include<string> using namespace std; bool compare(string src, string des); int main() { string src, des; cin>>src>>des; if(compare(src, des)) cout<< "true" << endl; else cout<< "false" << endl; return 0; } bool compare(string src, string des) { int len = src.length(); for(int i = 0; i < len; i ++) { char tempchar = src[0]; for(int j = 0; j < len - 1; j ++) src[j] = src[j + 1]; src[len - 1] = tempchar; if(src == des) { return true; } } return false; }
时间复杂度:O(m*n), 空间复杂度:O(1)
高效解法:小技巧,用空间去换时间,原本s1=AABBCD,我们将s1=s1+s1赋值给s1,就s1的结果为AABBCDAABBCD。会发现s1所有的循环移位的可能都包含在新s1中,直接在s1种找s2出现的位置,即可解决。
代码如下:
#include<iostream> #include<string> using namespace std; bool compare(string src, string des) { src = src + src; if(src.find(des) > src.length()) return false; else return true; } int main() { string src, des; cin>>src>>des; if(compare(src, des)) cout<< "true" << endl; else cout<< "false" << endl; return 0; }
时间复杂度:O(2*m), 空间复杂度:O(1)
相关文章推荐
- 编程之美3-1:字符串移位包含问题.
- 编程之美---->字符串移位包含问题
- 编程之美-3.1-字符串移位包含的问题
- 【编程之美】字符串移位包含的问题
- 字符串移位包含问题(编程之美_3.1)
- 编程之美-字符串移位包含的问题
- 编程之美 3.1字符串移位包含的问题
- 编程之美3.1字符串移位包含的问题的扩展问题
- 编程之美之字符串移位包含问题
- 编程之美3.1 字符串移位包含问题
- 编程之美------3.1 字符串移位包含的问题
- 编程之美 set 9 字符串移位包含问题
- [编程之美] PSet3.1 字符串移位包含的问题
- 读书笔记之编程之美 – 3.1 字符串移位包含的问题
- 【编程之美】字符串移位包含的问题(续)
- [编程之美]1 字符串移位包含问题
- 编程之美-字符串移位包含的问题
- 编程之美--3.1字符串移位包含的问题
- [转] 编程之美--字符串移位包含的问题
- 编程之美3.1 字符串移位包含问题