日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【FCC】No repeats please

發(fā)布時間:2023/11/21 综合教程 52 生活家
生活随笔 收集整理的這篇文章主要介紹了 【FCC】No repeats please 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:

把一個字符串中的字符重新排列生成新的字符串,返回新生成的字符串里沒有連續(xù)重復(fù)字符的字符串個數(shù).連續(xù)重復(fù)只以單個字符為準

例如, aab 應(yīng)該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有兩個 (aba and aba)沒有連續(xù)重復(fù)的字符 (在本例中是 a).

示例:

permAlone("aab") 應(yīng)該返回一個數(shù)字.
permAlone("aab") 應(yīng)該返回 2.
permAlone("aaa") 應(yīng)該返回 0.
permAlone("aabb") 應(yīng)該返回 8.
permAlone("abcdefa") 應(yīng)該返回 3600.
permAlone("abfdefa") 應(yīng)該返回 2640.
permAlone("zzzzzzzz") 應(yīng)該返回 0.

思路:

首先,把第一個字符和其后面的字符一一交換。

接著,固定第一個字符,求后面所有字符的排列。這個時候我們?nèi)园押竺娴乃凶址殖蓛刹糠郑汉竺孀址牡谝粋€字符,以及這個字符之后的所有字符。然后把第一個字符逐一和它后面的字符交換。

去重的全排列就是從第一個數(shù)字起每個數(shù)分別與它后面非重復(fù)出現(xiàn)的數(shù)字交換。

代碼:

<script type="text/javascript">
	function permAlone(str) {
		var arr = str.split("");
		var perarr = [];
		var begin = 0;
		//創(chuàng)建正則,如果字符串全重復(fù),則直接return 0
		var reg = /(.)\1+/g; //括號里面的代表分組,\1表示獲得和第一個分組里完全相同的內(nèi)容,也就是匹配任意連續(xù)的字符

		//如果字符全部重復(fù),直接返回0
		// if(arr.every(function(val){return val===arr[0];})){
		// return 0;
		// }
		//推薦以下方法
		if (str.match(reg) !== null && str.match(reg)[0] === str) {
			return 0;
		}
		//用于交換的函數(shù)
		function swap(index1, index2) {
			var temp = arr[index1];
			arr[index1] = arr[index2];
			arr[index2] = temp;
		}
		//如果begin到了最后一個字符,可以將這個字符串加入到全排列數(shù)組中了
		function permall(arr, begin) {
			if (begin == arr.length - 1) {
				perarr[perarr.length] = arr.join("");
				// console.log(perarr);

				return;
			}
			console.log(arr.length);
			for (var i = 0;
				(i + begin) < arr.length; i++) {
				// console.log('begin:'+begin);
				// console.log('begin+i:'+(begin+i));
				swap(begin, begin + i);
				// console.log(arr);
				permall(arr, begin + 1);
				// console.log('begin:'+begin);
				// console.log('begin+i:'+(begin+i));
				swap(begin, begin + i);

			}
		}
		// console.log('arr:'+arr);
		// console.log('begin:'+begin);

		permall(arr, begin);
		//返回相鄰不重復(fù)的數(shù)量
		console.log('結(jié)束后:' + perarr);
		return perarr.filter(function(val) {
			// console.log(val);
			// console.log(reg);
			return !val.match(reg);
		}).length;
	}
</script>

轉(zhuǎn)自:http://www.bubuko.com/infodetail-1846458.html

總結(jié)

以上是生活随笔為你收集整理的【FCC】No repeats please的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。