js找出重复的字符串

vizo
  • 418

规则: 找出指定长度的重复的字符串, 未匹配则返回空字符串

function getSameStr(str, n) {
//
}
const res = getSameStr('71235912304', 3)
console.log(res) // '123'
希望得到结果: '123'

回复
阅读 1.6k
4 个回答
function getSameStr(str, n) {
    var regExp = new RegExp(`(.{${n}}).*\\1`);
    regExp.test(str);    
    return RegExp.$1;
}

var result = getSameStr('712359123504', 3)
console.log(result) // '123'

var result = getSameStr('712359123504', 2)
console.log(result) // '12'
function getSameStr(str, n) {
    if(n >= str || n <= 0){
        return [];
    }
    let newArr = [];//存放由str分割成的长度为n的字符串。
    let result = [];//存放返回结果
    for(let i = 0; i+n <= str.length; i++){
        let newStr = str.substr(i,n);
        if(contains(newArr,newStr)){
            result.push(newStr);
        }
        newArr.push(newStr);        
    }
    return result;
}
function contains(array, obj) {
    var i = array.length;
    while (i--) {
       if (array[i] === obj) {
           return true;
       }
    }
    return false;
}
let red = getSameStr('71235912304', 3)
console.log(red) // ['123']

你这个问题都没有描述清楚
按你的期望,应该是在字符串中找出第1个N字符的连续升序子串
按这个,则 符合条件的有 '123','235','359','123' 这几个符合连续升序数量,第1个是'123'
这个的处理需要先把字符串转换为编码(方便比较)数组,然后进行查找比较,输出第1个符合条件的子数组,再转换为字符串输出,查找不到则输出空。

function getA(arr){
    let rt=[];
    for( let i=0;i<arr.length;i++){
        rt.push( arr.codePointAt(i) )
    }
    return rt;
}

function getSameStr(str, n) {
   let rt='';
   let Arr;
   if(n<=str.length) { 
        Arr=getA(str)
        let i=0;
        let AL=Arr.length;
        while(i<(AL-n)){
            let flag=true;
            for(let j=1;j<n;j++){
                if(Arr[i+j]<Arr[i+j-1]){
                    flag=false;
                    i=i+j;
                    break;
                }
            }
            if(flag){
                for(let k=0;k<n;k++){
                    rt=rt+String.fromCharCode(Arr[i+k])
                }
                break;
            }
        }
   }
   return rt;
}

const res = getSameStr('71235912304', 5)
console.log(res) // '12359'
宣传栏