检查字符串在javascript中是否包含3个或更多有序字符(无正则表达式)
正在查找可以检测字符串是否存在的代码 重复字符(sss,333,!!!) 和/或如果 按顺序包含后续字符,例如(345、efg、abc、789) 我知道他们使用正则表达式的存在方式,但我想知道是否存在只使用循环的算法检查字符串在javascript中是否包含3个或更多有序字符(无正则表达式),javascript,node.js,string,loops,Javascript,Node.js,String,Loops,正在查找可以检测字符串是否存在的代码 重复字符(sss,333,!!!) 和/或如果 按顺序包含后续字符,例如(345、efg、abc、789) 我知道他们使用正则表达式的存在方式,但我想知道是否存在只使用循环的算法 const str="abc123"; //loop through char to determine if it contains subsequent characters like abc... //str should return true //l
const str="abc123";
//loop through char to determine if it contains subsequent characters like abc...
//str should return true
//loop through char to determine if it contains repeated characters like bbb...
//str should return false
可以使用JavaScript提供的charCodeAt函数。 您需要遍历字符串并比较它是重复字符还是有序字符 这里是链接
var str=“abc123”;
str=str.toLowerCase();
var len=str.length;
var a=str.charCodeAt(0);
var n=3;
var isRepeatingCharFound=false;
var isOrderedCharFound=false;
对于(变量i=0;i 如果(i+(n-1)请考虑下面的代码,其中函数分析返回0或输入字符串中出现的最长序列的长度(最小为3)。在布尔表达式中,0将计算为false,任何其他数字将计算为true。我已创建了两个版本。在第一个版本中,您可以传递模式参数:
- 1检查重复序列
- 2检查后续的升序序列
- 3检查后续降序序列
第二个版本结合了这三种模式,因此不需要模式参数。以下是第一个版本:
const str = "abc123";
function analyze(s, mode) {
var count = 0, max = 0, diff, step;
switch(mode) {
case 1: step = 0; break; /* repeating */
case 2: step = 1; break; /* subsequent: ascending */
case 3: step = -1; break; /* subsequent: descending */
default: step = 0;
}
for (i = 0; i < s.length; i++) {
if (i > 0) {
diff = s.charCodeAt(i) - s.charCodeAt(i - 1);
if (diff == step) count++;
if ((diff != step || i == s.length - 1) && count > 0) {
max = Math.max(count + 1, max);
count = 0;
}
}
}
return (max > 2 ? max : 0);
}
alert(analyze(str, 2));
const str=“abc123”;
功能分析(s,模式){
变量计数=0,最大值=0,差异,步长;
开关(模式){
案例1:步骤=0;中断;/*重复*/
案例2:步骤=1;中断;/*后续:升序*/
案例3:步骤=-1;中断;/*后续:下降*/
默认值:步长=0;
}
对于(i=0;i0){
diff=s.charCodeAt(i)-s.charCodeAt(i-1);
if(diff==step)count++;
if((diff!=步长| | i==s.length-1)和&count>0){
最大值=数学最大值(计数+1,最大值);
计数=0;
}
}
}
返回(最大值>2?最大值:0);
}
警报(分析(str,2));
这是第二个版本:
var str = "aaxyzzzyxwv";
function analyze(s) {
var count = 0, max = 0, mode_cur = 0, mode_prv = 0, diff;
for (i = 0; i < s.length; i++) {
if (i > 0) {
diff = s.charCodeAt(i) - s.charCodeAt(i - 1);
switch(diff) {
case 0: mode_cur = 1; break; /* repeating */
case 1: mode_cur = 2; break; /* subsequent: ascending */
case -1: mode_cur = 3; break; /* subsequent: descending */
default: mode_cur = 0;
}
if (mode_prv != mode_cur) count = 0;
if (mode_cur) {
count++;
max = Math.max(count + 1, max);
}
}
mode_prv = mode_cur;
}
return (max > 2 ? max : 0);
}
alert(analyze(str));
var str=“aaxyzzyxwv”;
功能分析{
var计数=0,最大值=0,模式_cur=0,模式_prv=0,差异;
对于(i=0;i0){
diff=s.charCodeAt(i)-s.charCodeAt(i-1);
开关(差分){
案例0:模式\u cur=1;中断;/*重复*/
案例1:模式2;中断;/*后续:升序*/
案例1:模式\u cur=3;中断;/*后续:下降*/
默认值:mode_cur=0;
}
如果(mode_prv!=mode_cur)计数=0;
如果(当前模式){
计数++;
最大值=数学最大值(计数+1,最大值);
}
}
模式_prv=模式_cur;
}
返回(最大值>2?最大值:0);
}
警报(分析(str));
循环遍历索引。获取索引、索引+1和索引+2处的字符代码。然后检查这些代码是否连续。您可以使用charCodeAt()
method.StackOverflow不是免费的编码服务。您需要这样做。请更新您的问题,以显示您在a中已经尝试过的内容。有关更多信息,请参阅,并点击:)