请选择 进入手机版 | 继续访问电脑版
931 3

[作业] 给定一个字符串,请你将字符串重新编码 [推广有奖]

  • 0关注
  • 0粉丝

大专生

60%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.0500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
440 点
帖子
42
精华
0
在线时间
43 小时
注册时间
2021-4-10
最后登录
2023-3-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成A4B1C2D1A2
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:字符串 ABC DAA CCD BCC

owenqi 在职认证  学生认证  发表于 2021-6-16 11:53:38 |显示全部楼层 |坛友微信交流群
你可以试试看用,strsplit, rle, unlist, paste0就可以了
已有 1 人评分论坛币 热心指数 收起 理由
llb_321 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  热心指数 + 5   查看全部评分

使用道具

总感觉写复杂了,好久没有写递归了。
  1. myfun <- function(x, i = 1) {
  2.   stopifnot(is.character(x), i <= nchar(x))
  3.   if (nchar(x) == 1)
  4.     result = paste0(x, 1)
  5.   else {
  6.     number = 1
  7.     if (i + 1 <= nchar(x)) {
  8.       while (stringr::str_sub(x, i , i) == stringr::str_sub(x, i + 1, i + 1)) {
  9.         i <- i + 1
  10.         number = number + 1
  11.       }
  12.       result = paste0(stringr::str_sub(x, i , i), number)
  13.       
  14.       if (i < nchar(x))
  15.         result = paste0(result, myfun(x, i = i + 1))
  16.     } else
  17.       result = paste0(stringr::str_sub(x, i , i), 1)
  18.   }
  19.   return(result)
  20. }


  21. > myfun("jjojnonogggg")
  22. [1] "j2o1j1n1o1n1o1g4"
  23. > myfun("jjojnonog")
  24. [1] "j2o1j1n1o1n1o1g1"
  25. > myfun("jj")
  26. [1] "j2"
  27. > myfun("j")
  28. [1] "j1"
复制代码


使用道具

owenqi 发表于 2021-6-16 11:53
你可以试试看用,strsplit, rle, unlist, paste0就可以了
rle()确实写得好,采用滞后的思想,我没想到。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 18:47