判断两个字符串是否互为变形词
来源:互联网 发布:网络推广文案例子 编辑:程序博客网 时间:2024/04/29 04:14
题目:
给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,则str1和str2互为变形词。
请实现函数判断两个字符串是否互为变形词。
举例:
str1="123", str2="231", 返回true;
str1="123", str2="2331",返回false。
难度:★
代码:
#include <iostream>#include <algorithm>#include <string>using namespace std;int main(){string str1, str2;getline(cin, str1);getline(cin, str2);int len1 = str1.size(), len2 = str2.size(),i;if (len1 != len2){cout << 'N';return 0;}sort(str1.begin(), str1.end());sort(str2.begin(), str2.end());for (i = 0; i < len1; i++){if (str1[i] != str2[i]){cout << 'N';return 0;}}cout << 'Y';return 0;}思路:
题目要求是只要保证两个字符串的种类相同、个数相等就是变形词。
首先,判断两个字符串长度是否相等,若满足,则进行下一步判断;若不满足,则可以直接判定不是变形词;
其次,对这两个字符串分别进行升序排列;
再次,遍历整个字符串,判断相同下标的字符是否相等。循环中判断有不等,则可以判定不是变形词;若遍历结束仍相等,则可以判定是变形词。
参考代码:
#include <iostream>#include <string>#include <map>using namespace std;int main(){string str1, str2;map<char, int>m;getline(cin, str1);getline(cin, str2);int len1 = str1.size(), len2 = str2.size(),i;if (len1 != len2){cout << 'N';return 0;}for (i = 0; i < len1; i++)m[str1[i]]++;for (i = 0; i < len2; i++){if (--m[str2[i]] < 0){cout << 'N';return 0;}}cout << 'Y';return 0;}思路:
如果字符串str1和str2长度不同,直接返回false。
如果长度相同,动态申请一个map空间m,m[a]=b代表字符a出现次数为b,初始时为0;
先遍历字符串str1,统计每种字符出现次数,如遍历到字符'a',则m['a']++。这样就形成了str1中每种字符的词频统计表。
再遍历字符串str2,每遍历到一个字符都在m中把词频减一,如遍历到字符'a',则m['a']--。
如果减小之后的值小于0,直接返回false;如果遍历完str2,m中的值没有出现负值,则返回true。
0 0
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- 判断两个字符串是否互为变形词
- C++判断字符串是否互为变形词
- 判断两个字符串是否互为变位词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 5.1判断两个字符串是否互为变形词(输入流)
- [编程之美-09]判断两个字符串是否互为变形词
- java算法1~两个字符串是否互为变形词
- 时间类2
- 队列的实现
- 增长黑客(Growth Hacker)介绍
- java基础
- Main()方法
- 判断两个字符串是否互为变形词
- Content Provider
- 【Netty】实现Netty4的web socket服务,比如聊天室的原型
- java中Integer的比较
- linux配置ftp服务器
- openjudge SDAU 链表 构造单向链表
- 整合iBatis和Spring之SqlMapClientDaoSupport
- JAVA环境变量的配置及常用工具说明
- 猜数字游戏