[leetcode 249] Group Shifted Strings
2015-11-17 09:10
369 查看
Question:
Given a string, we can "shift" each of its letter to its successive letter, for example:"abc" -> "bcd". We can keep "shifting" which forms the sequence:
"abc" -> "bcd" -> ... -> "xyz"
Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence.
For example, given:["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"],
Return:
[
["abc","bcd","xyz"],
["az","ba"],
["acef"],
["a","z"]
]
分析:
使用hashmap,关键字key为首个字符串相邻元素的差值和,如果差值为负数,则加上26,比如“abc”的key是(‘a’-‘b’+26)+(‘b’-‘c’+26),再转化成字符串。
这样,shifted字符串的关键字key相同。
代码如下:
Given a string, we can "shift" each of its letter to its successive letter, for example:"abc" -> "bcd". We can keep "shifting" which forms the sequence:
"abc" -> "bcd" -> ... -> "xyz"
Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence.
For example, given:["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"],
Return:
[
["abc","bcd","xyz"],
["az","ba"],
["acef"],
["a","z"]
]
分析:
使用hashmap,关键字key为首个字符串相邻元素的差值和,如果差值为负数,则加上26,比如“abc”的key是(‘a’-‘b’+26)+(‘b’-‘c’+26),再转化成字符串。
这样,shifted字符串的关键字key相同。
代码如下:
<span style="font-size:14px;">class Solution { public: vector<vector<string>> groupStrings(vector<string>& strings) { unordered_map<string, vector<string>> hashmap; vector<vector<string>> res; for (int i = 0; i < strings.size(); ++i) { hashmap[calKey(strings[i])].push_back(strings[i]); } for (auto it = hashmap.begin(); it != hashmap.end(); ++it) { sort(it->second.begin(), it->second.end());//second 访问的是map的第二个元素,即元素值。 vector<string> tmp = it->second; res.push_back(tmp); } return res; } private: string calKey(string input) { string key = ""; for (int i = 0; i < input.length() - 1; ++i) { int gap = (input[i] > input[i+1]) ? (input[i] - input[i+1]) : (input[i] - input[i+1] + 26); char num = 'a' + gap; key += num; } return key; } };</span>
相关文章推荐
- T041 矩阵最外圈减内心差
- 人生感悟:人成长的开始
- Linux 性能优化之 IO 子系统
- 二叉树的理解
- J2EE——开发环境搭建
- Securing your Android apps
- swift循环
- MySQL 之 初识SQL
- 表单常见功能补全(代码+注释)
- 跟我学习javascript的undefined与null
- 如何给DateTime类型赋空值
- 关于数据倾斜的问题
- T016
- linux本地文件上传之RZ/SZ和sftp
- 移动H5前端性能优化指南
- shiro+springmvc+mybatis(2)
- OpenGL学习常用网站
- 创建下拉(Pull-Down)菜单
- weblogic12.1.3的安装
- poi 导出excel