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++语言实现。是博主学习该书的一个过程!希望没有侵犯版权!