字符串问题
* 判断两个字符串是否互为变形词
题目:
给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词。
举例:
str1="123", str2="231",返回ture。
* 判断两个字符串是否互为变形词
题目:
给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词。
举例:
str1="123", str2="231",返回ture。
str1="123", str2="2331",返回false。
如果字符串str1和str2的长度不同,那么直接返回false。
如果长度相同,假设出现的编码值在0-255之间,那么先申请一个长为256的整形数组map,map[a] = b代表字符编码为a的字符出现了b次,初始时map[0...255]的值都为0。然后遍历字符串str1,统计每种字符出现的数量,比如遍历到字符'a',其编码值为97,则map[97]++。这样map就成了str1中每种字符的词频统计表,然后遍历str2,没遍历到str2,枚遍历一个字符都在map中把词频减去一个,比如遍历到'a',其编码值为97,则map[97]--,如果减少之后的值小于0,直接返回false。遍历完str2,没有出现负值,则返回true.
#include<iostream>
#include<cstring>
using namespace std;
bool isDeformation(string str1, string str2);
int main()
{
string str1, str2;
cin>>str1>>str2;
if(isDeformation(str1, str2))
cout<<str1<<"和"<<str2<<"互为变形词"<<endl;
else
cout<<str1<<"和"<<str2<<"不互为变形词"<<endl;
return 0;
}
bool isDeformation(string str1, string str2)
{
if(str1.length() == 0 || str2.length() == 0 || str1.length() != str2.length())
return false;
int map[256];
memset(map, sizeof(map), 0);
for(int i = 0; i < str1.length(); i ++)
map[str1[i]] ++;
for(int i = 0; i < str2.length(); i ++)
if(map[str2[i]]-- == 0)
return false;
return true;
}
题目参考:左程云著 程序员代码面试指南IT名企算法与数据结构题目最优解。博主采用C++语言实现。是博主学习该书的一个过程!希望没有侵犯版权!