面试算法题

来源:互联网 发布:电熨斗推荐 知乎 编辑:程序博客网 时间:2024/06/05 07:50

1.字符串压缩

不考虑字符数超过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;}

0 0