变形词(C++版)
2015-11-24 00:46
232 查看
题目:
对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。
给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。
思路:统计各字符串中字符出现的次数 逐次比较即可。
注:C++中字符串的ASCII码范围0~255 因此可以用固定长度数组代替HashMap节省存储空间。
算法复杂度:
时间复杂度:O(n)
空间复杂度:O(n)
贴代码:
0
对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。
给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。
思路:统计各字符串中字符出现的次数 逐次比较即可。
注:C++中字符串的ASCII码范围0~255 因此可以用固定长度数组代替HashMap节省存储空间。
算法复杂度:
时间复杂度:O(n)
空间复杂度:O(n)
贴代码:
// 如果给定的2个字符串长度都不相同 肯定不可能是变形词 直接返回false if(lena != lenb) { return false; } // 统计2个字符串中各个字符出现的次数 256表示字符串ASCII码的最大值+1 vector<int> ACnt(256, 0); vector<int> BCnt(256, 0); for(int i = 0; i < lena; ++i) { ACnt[A[i]]++; BCnt[B[i]]++; } for(int i = 0; i < 256; ++i) { if(ACnt[i] != BCnt[i]) { return false; } } return true;测试函数:
int main(void) { string A = "abc"; string B = "bcc"; cout<<chkTransform(A, A.length(), B, B.length())<<endl; return 0; }输出:
0
相关文章推荐
- 指针的初级知识点总结
- 统计字符
- 整数n转换为以b进制的数,itob
- 数字转换为对应的字符串,itoa
- 《深度探索C++对象模型》读书笔记——第一章(关于对象)
- 字符串变整数,atoi()
- 子字符串查找
- C语言移位运算符
- C++ 引用计数(reference count) 实现智能指针
- C语言从命令行接收参数
- C语言中快速排序和插入排序优化的实现
- C语言下载网页源代码并保存到本地磁盘
- [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1
- 求数组相邻元素差值的最大值快速算法(C++版)
- strlen函数实现——string.h库函数
- c语言:分别使用for循环和while循环求5!
- 面试之C++题目汇总7
- c语言:输出(Welcome??)和(Welcome\?\?)
- 面试之C++题目汇总6
- 使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World