两个字符串是变位词
2015-10-27 17:07
477 查看
题目来源:LintCode
原题地址:http://www.lintcode.com/zh-cn/problem/two-strings-are-anagrams/
题目:
写出一个函数
您在真实的面试中是否遇到过这个题?
Yes
样例
给出 s=
难度级别:
容易
思路分析:
这里我们如果不能够借助其他辅助空间的话,那么只能先排序在进行比对了。这样最快的时间复杂度应该是O(nlogn+n)。
如果我们使用一些辅助空间的话,就可以采用数组hash的形式来进行计算了。
ascii码总共是256个字符,因此设定长度为256的数组。初始值全部置为0.
同时遍历两个字符串,字符串s对应的字符位置采用+1的形式,字符串t对应的字符位置采用-1的形式。
遍历结束之后,在此遍历数组,若全为0,则表示这两个字符串是颠倒字母构成的,否则就不是。
实现代码:
代码说明:
具体实现时,最好还是先判断下,两个字符串是否长度相等,若不等,则不需要判断了直接返回false即可。
原题地址:http://www.lintcode.com/zh-cn/problem/two-strings-are-anagrams/
题目:
写出一个函数
anagram(s, t)去判断两个字符串是否是颠倒字母顺序构成的
您在真实的面试中是否遇到过这个题?
Yes
样例
给出 s=
"abcd",t=
"dcab",返回
true
难度级别:
容易
思路分析:
这里我们如果不能够借助其他辅助空间的话,那么只能先排序在进行比对了。这样最快的时间复杂度应该是O(nlogn+n)。
如果我们使用一些辅助空间的话,就可以采用数组hash的形式来进行计算了。
ascii码总共是256个字符,因此设定长度为256的数组。初始值全部置为0.
同时遍历两个字符串,字符串s对应的字符位置采用+1的形式,字符串t对应的字符位置采用-1的形式。
遍历结束之后,在此遍历数组,若全为0,则表示这两个字符串是颠倒字母构成的,否则就不是。
实现代码:
class Solution { public: /** * @param s: The first string * @param b: The second string * @return true or false */ bool anagram(string s, string t) { int flag[256] = { 0 }; if (s.size() != t.size()) { return false; } else { for (int i = 0; i < s.size(); i++) { flag[s[i]]++; flag[t[i]]--; } } for (int i = 0; i < 256; i++) { if (flag[i] != 0) { return false; } } return true; } };
代码说明:
具体实现时,最好还是先判断下,两个字符串是否长度相等,若不等,则不需要判断了直接返回false即可。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 数据库链接字符串查询网站
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- Flex字符串比较 还有Flex字符串操作
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- Lua中调用C++函数示例
- Lua源码中字符串类型的实现
- Lua性能优化技巧(四):关于字符串
- Lua教程(一):在C++中嵌入Lua脚本
- 字符串聚合函数(去除重复值)
- Ruby中的字符串编写示例
- Lua教程(二):C++和Lua相互传递数据示例
- 总结的5个C#字符串操作方法分享