1、请用程序判断一个非空字符串是否是由所含的一个子串重复多次组成,字符串只包含小写字母且长度不超过5000。举例:abdeabdeabde,返回true,abdeabdeabd,返回false
var str="abcdabcdabcd";
console.log(method(str));
function method(str){
var strlen=str.length;
var flag=0;
var count=0; //相等子串的个数
for(var i=strlen;i>0;i--){ //子串长度
if(strlen%i == 0){ //字符串按子串长度均匀划分
var zinum=strlen/i; //子串个数
for(var k=0;k<i;k++){ //子串中的第几个字母
for(var j=1;j<zinum;j++){
if(str[k]==str[i*j+k]){
count++;
}
}
}
if(count == (j-1)*i && count!=0){
flag=1;
break;
}
}
}
if(flag==1){
return true;
}else{
return false;
}
}
2.循环报数;n个人编号为1-n,从第一个人开始从1报数,每次报到k的人退出,退出的人的下一个人开始从1继续报数,依次循环,求最后退出的人的序号
function method(n,k) {
var num=n; //保存总人数
var arr = [];
for (var i = 0; i < n; i++) {
arr[i] = true;
}
var index = 0;
var count = 0;
while (n > 1) {
if (arr[index] == true) { //为true参与报数
count++; //从1开始报数
if (count == k) {
arr[index] = false; //报到k的人退出,以后不参数报数
n--;
count=0; //退出后从1开始重新报数
}
}
index++;
if (index == num) { //最后一个人报数
index = 0; //继续从第一个人开始报数
}
}
for (var j = 0; j < num; j++) {
if (arr[j] == true) {
return j+1;
}
}
}
console.log(method(10,3));
//参考:https://blog.csdn.net/qq_41030039/article/details/90724619
3.颜色格式的转换;举例:输入 rgb(255,255,255),输出 #ffffff
var s = 'rgb(255,255,255)';
console.log(rgb2hex(s));
function rgb2hex(sRGB) {
var res="#";
var reg=/^rgb \( (\d+) \s*, \s*(\d+)\s*, \s*(\d+) \)$/;
if(reg.test(sRGB)==null){
return sRGB;
}else{
var s = sRGB.split("(")[1].split(")")[0].split(",");
for(var i=0;i<s.length;i++){
res += method(s[i]);
}
return res;
}
function method(s){
var r = parseInt(s);
return r>16 ? r.toString(16) : '0'+ r.toString(16);
}
}
3、给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
var str="[]({})";
var res=(function(str){
var arr=[];
var result=[];
if(str.length%2 != 0){ //括号成对出现,对2取余为0
return false;
}else{
for(var i=0;i<str.length;i++){
if(str[i]==="(" || str[i]==="{" || str[i]==="["){
arr.push(str[i]); //左括号全部进栈
}else{
var t=null; //为左括号匹配的右括号
if(str[i]==")"){
t="(";
}else if(str[i]=="}"){
t="{";
}else if(str[i]=="]"){
t="["
}
if(t!=arr.pop()){ //为左括号匹配的右括号与栈顶元素不相等
result.push(0);
}
}
}
}
if(result.indexOf(0)!=-1 && result!=[]){
return false;
}else{
return true;
}
})(str);
console.log(res);
4.生成一定范围内的随机数
console.log(method(3,7));
function method(min,max){
var arr=[]
for(var i=0;i<100;i++) {
// arr.push(Math.floor(Math.random()*(max-min)+min)); //[min,max)
arr.push(Math.floor(Math.random() * (max - min+1) + min)); //[min,max]
}
return arr;
}
5. 二分查找
function method(arr,key){
var min=0;
var max=arr.length-1;
while(min<=max){
var mid = parseInt((min+max)/2);
if(arr[mid] == key){
return mid;
}else if(arr[mid] > key){
max = mid-1;
}else if(arr[mid] < key){
min = mid+1;
}
}
return -1;
}
console.log(method([2,5,8,13,24],13));
6.判断是否为黄金数:黄金数定义为一个数等于除1和本身之外的其他因子的乘机;
如:输入6=2*3 输出true
function method(num){
var mult=1;
for(var i=2;i<num;i++){
if(num%i == 0){
mult*=i;
}
}
if(mult == num){
return true;
}else{
return false;
}
}
console.log(method(8));
7.统计一个字符串中出现次数最多的字符及出现次数
function method(str){
var obj={};
for(var i=0;i<str.length;i++){
if(!obj[str[i]]){
obj[str[i]]=1;
}else{
obj[str[i]]+=1;
}
}
var maxkey,maxnum= 0;
for(var key in obj){
if(obj[key]>maxnum){
maxnum=obj[key];
maxkey = key;
}
}
return maxkey+","+maxnum;
}
console.log(method("aaakkkkkijnjbb"));
4675

被折叠的 条评论
为什么被折叠?



