您的位置:首页 > 编程语言 > C语言/C++

变形词(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)

贴代码:

// 如果给定的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: