JavaScript实现checkString函数判断字符串是否由指定子串重复构成
JavaScript实现checkString子串重复拼接校验函数
核心逻辑
要判断目标字符串是否完全由指定子串重复拼接构成,只需要满足3个核心判断条件:
- 子串不能为空,且目标字符串长度不能小于子串长度
- 目标字符串长度必须是子串长度的整数倍(重复拼接不存在截断,长度必然是整数倍关系)
- 按重复次数拼接子串,得到的结果和目标字符串完全一致
代码实现
ES6简洁版
直接用字符串原生repeat方法生成重复串做比对,代码简洁易读,适合现代浏览器/Node.js环境:
function checkString(str, substr) { if (!substr.length || str.length < substr.length) return false; if (str.length === substr.length) return str === substr; if (str.length % substr.length !== 0) return false; return substr.repeat(str.length / substr.length) === str; }
兼容旧环境版
不依赖ES6 API,通过逐位字符比对实现,兼容性更好,大字符串场景下内存占用更低:
function checkString(str, substr) { var subLen = substr.length; var strLen = str.length; if (subLen === 0 || strLen < subLen) return false; if (strLen === subLen) return str === substr; if (strLen % subLen !== 0) return false; for (var i = 0; i < strLen; i++) { if (str[i] !== substr[i % subLen]) return false; } return true; }
示例校验
对给出的标准测试用例,运行结果完全符合预期:
checkString("abc", "abc")-> true(单次子串刚好匹配)checkString("abcabcabc", "abc")-> true(子串重复3次完全匹配)checkString("abcdef", "abc")-> false(重复2次为abcabc,和目标串不一致)
注:给出的第四个示例存在语法笔误(子串参数漏写闭合引号),且按需求描述的「完全由子串重复拼接」规则,长度为5的
abcab不可能由长度为3的abc整数次拼接得到,属于输入错误,可根据实际业务场景调整判断规则。
内容的提问来源于stack exchange,提问作者bjeelaa
相关产品推荐
相关产品推荐

