R语言中验证数字折叠字符串是否为连续递增1序列
判断折叠数字字符串是否为连续递增1序列的R语言实现
搞定这个问题很简单!我们需要写一个R函数,尝试不同的初始数字拆分方式,验证拆分后的序列是不是每次递增1的。下面是具体的实现思路和代码:
思路解析
要验证这类折叠字符串,核心逻辑就是尝试所有可能的初始数字长度:
- 初始数字的长度不可能超过字符串总长度的一半(毕竟至少要拆出两个数字,比如长度为5的字符串,初始最长只能是2位,否则剩下的字符不够组成第二个数字)
- 对每个可能的初始长度,提取第一个数字,然后依次生成后续应该出现的数字(每次+1),把这些数字拼接成字符串后和原字符串对比,匹配就说明符合要求
R代码实现
is_consecutive_sequence <- function(s) { str_length <- nchar(s) # 初始数字最长为字符串长度的一半(向下取整) max_initial_len <- floor(str_length / 2) for (len in 1:max_initial_len) { # 提取第一个数字并转为数值 current <- as.numeric(substr(s, 1, len)) # 存储预期的数字字符串 expected_parts <- c(as.character(current)) # 不断生成下一个数字,直到拼接后的长度等于原字符串 while (nchar(paste(expected_parts, collapse = "")) < str_length) { current <- current + 1 expected_parts <- c(expected_parts, as.character(current)) } # 对比拼接后的字符串和原字符串 if (paste(expected_parts, collapse = "") == s) { return(TRUE) } } # 所有可能都不匹配,返回FALSE return(FALSE) }
代码说明
- 函数接收目标字符串
s作为输入 - 循环遍历所有可能的初始数字长度(从1到字符串长度的一半)
- 对每个初始长度,生成完整的预期数字序列并拼接成字符串,和原字符串完全匹配就返回
TRUE - 如果所有初始长度都尝试后都不匹配,返回
FALSE
测试示例
运行以下代码验证你的示例:
# 测试符合要求的案例 is_consecutive_sequence("91011") # 输出 TRUE(对应9,10,11) is_consecutive_sequence("89909192") # 输出 TRUE(对应89,90,91,92) # 测试不符合要求的案例 is_consecutive_sequence("18192123") # 输出 FALSE(对应18,19,21,23,差值不为1)
也可以测试一些边界情况:
is_consecutive_sequence("12") # TRUE(1,2) is_consecutive_sequence("910") # TRUE(9,10) is_consecutive_sequence("112") # FALSE(无论拆成1+12还是11+2,都不连续)
内容的提问来源于stack exchange,提问作者Tony Hellmuth
相关产品推荐
相关产品推荐

