javascript检查重复字符串

javascript检查重复字符串

题目描述

给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false。

思路一

最直接的方法就是暴力循环检测是否有重复字母出现。

function containsRepeatingLetter(str) {
	// 第一步
	// 将非字母替换为空
	var tmp = str.replace(/[^a-zA-Z]*/g, '');
	// 当替换后字符串长度小于2时,字符串中不包含重复字母
	if (tmp.length < 2) {
	    return false;
	}

	// 第二步
	// 接下来正式开始判断
	var rstr = ""; // 声明一个空字符串用于存放已经遍历的字母

	// 循环遍历 tmp
	for (var i = tmp.length - 1; i >= 0 ; i--) {
		// 如果出现重复字母,则退出循环,此时rstr字符串长度必定小于tmp字符串长度
		if (rstr.indexOf(tmp[i]) !== -1) {
			break;
		}
		rstr += tmp[i];
	}
	
	// 遍历结束后,比较tmp与rstr字符串长度
	return rstr.length < tmp.length;
}

思路二

我们可以将上面的第二步换一个角度来思考: 我们把字符串先转化为数组,当数组中有重复的值的时候,我们来观察一下他们键和值的特点。


var arr = ['a', 'b', 'a'];

a[0] === 'a'

a[1] === 'b'

a[2] === 'a'

// 发现了数组的键始终是惟一的,那我们把数组的键和值调换一下位置看看

a['a'] = 0

a['b'] = 1

a['a'] = 2

此时看一下第一次赋值将会被第三次赋值覆盖:

console.log(a) // a['a'] = 2 a['b'] = 2 此时只有两个键

由此我们对思路一的第二步改一下:


function containsRepeatingLetter(str) {
	// 第一步
	// 将非字母替换为空
	var tmp = str.replace(/[^a-zA-Z]*/g, '');
	if (tmp.length < 2) {
	    return false;
	}

	// 第二步
	// 字符串转数组
	var arr = tmp.split('');
	var reverse = [];
	// 倒置数组键值
	arr.forEach(function (value, index) {
		if (!reverse[value]) {
			reverse[value] = index;
			reverse.length++;
		}
	});
	
	return reverse.length !== arr.length;
}

思路三

我们可以直接使用强大的正则表达式来完成:

function containsRepeatingLetter(str) {
	// \1 是对正则表达式中第一个匹配的引用,也就是 ([a-zA-Z]) 匹配字母中的任意一个
    return /([a-zA-Z])[a-zA-Z]*\1/.test(str);
}

不过以上的方法只能检测字符串中是否有重复的字符出现, 那么下面我们来针对连续重复的字符做些修改

  • 对字符串进行搜索
function containsRepeatingLetter(str) {
	var len = str.length;
	if (len < 2) {
		return false;
	}
	
	for (i = 1; i < len; i++) {
		if (str[i - 1] === str[i]) {
			return true;
		}	
	}

	return false;
}
  • 正则表表达式
function containsRepeatingLetter(str) {
	// 利用正则表达式匹配字符串中连续的字符
    return !!str.match(/([a-zA-Z])\1/);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值