面试算法题
2017-05-04 16:15
113 查看
1.字符串压缩
不考虑字符数超过9。
考虑字符数超过9。
2.字符串解压
不考虑字符数超过9。
#include <string> #include <iostream> std::string solution(std::string s) { std::string ans; int i = 0, j = 0; while (i < int(s.length())) { while (s[i] == s[j]) ++i; ans += s[j]; ans += std::to_string(i - j); j = i; } return ans; } int main() { // 输入 std::string s; std::cin >> s; // 字符串压缩 std::string ans = solution(s); // 输出 std::cout << ans; }
考虑字符数超过9。
#include <string> #include <iostream> std::string solution(std::string s) { std::string ans; int i = 0, j = 0; while (i < int(s.length())) { while (s[i] == s[j]) ++i; ans += s[j]; int count = i-j; while (count / 10) { ans += std::to_string(9); ans += s[j]; count -= 9; } ans += std::to_string(count); j = i; } return ans; } int main() { // 输入 std::string s; std::cin >> s; // 字符串压缩 std::string ans = solution(s); // 输出 std::cout << ans; }
const scanf = require('scanf'); let input = scanf('%s'); function solution(s) { let ans = []; let i = 0, j = 0; while (i < s.length) { while (s[i] === s[j]) ++i; ans += s[j]; let count = i - j; while (parseInt(count / 10, 10)) { ans += 9; ans += s[j]; count -= 9; } ans += count; j = i; } return ans; } let ans = solution(input); console.log(ans);
2.字符串解压
std::string extract_string(std::string s) { std::string ans; for (int i = 0; i < int(s.length()); i+=2) { int count = int(s[i+1])-int('0'); for (int j = 0; j < count; ++j) ans += s[i]; } return ans; } int main() { // 输入 std::string s; std::cin >> s; // 字符串解压 std::string ans = extract_string(s); // 输出 std::cout << ans; }
相关文章推荐
- [算法总结] 20 道题搞定 BAT 面试——二叉树
- [转]面试算法小记
- 程序员如何准备面试中的算法
- 机器学习常见算法个人总结(面试用)【转载】
- 《程序员编程艺术:面试和算法心得》——目录
- 面试算法题1
- 笔试面试中的算法题小议
- 《程序员编程艺术:面试和算法心得》——目录
- 笔试+面试之数据结构与算法
- 【LeetCode-面试算法经典-Java实现】【118-Pascal's Triangle(帕斯卡三角形)】
- 经典面试问题:12小球问题算法(源码)
- 程序员如何快速准备面试中的算法(转)
- 简单的面试算法题:非循环求字符串长度和字符串拷贝源函数
- 面试算法题:爬楼梯,N级楼梯有多少种走法?
- 代码面试最常用的10大算法
- 【算法面试题】求两个相交链表的首个相交节点(转)
- 前端开发面试笔试学习--算法01--数组求和/数组去重
- 程序员编程艺术第一~四十章集锦与总结--面试、算法、编程
- 面试算法
- 程序员如何快速准备面试中的算法