基礎算法之"字符串類"

題目: 557. 反轉字符串中的單詞 III

思路:先根據(jù)空格把字符串裝換為數(shù)組,然后翻轉數(shù)組中每一項字符串的字符順序,最后再組裝成字符串

方法1:使用split(' ')分隔字符串
// 功能實現(xiàn)
export default (str) => {
    // 字符串按空格進行分隔,保存數(shù)組,數(shù)組的元素的先后順序就是單詞的順序
    let arr = str.split(' ');
    // 對數(shù)組進行遍歷,然后每個元素進行反轉
    let result = arr.map(item => {
        return item.split('').reverse().join('');
    });
    return result.join(' ');
}

// 更優(yōu)雅的寫法
export default (str) => {
    // 1. 字符串按空格進行分隔,保存數(shù)組,數(shù)組的元素的先后順序就是單詞的順序
    // 2. 對數(shù)組進行遍歷,然后每個元素進行反轉
    return str.split(' ').map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}
方法2:使用split(/\s/g)分隔字符串
export default (str) => {
    // 1. 字符串按空格進行分隔,保存數(shù)組,數(shù)組的元素的先后順序就是單詞的順序
    // 2. 對數(shù)組進行遍歷,然后每個元素進行反轉
    return str.split(/\s/g).map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}
方法3:使用match(/[\w']+/g)匹配單詞
export default (str) => {
    // 1. 匹配字符串中的單詞,保存數(shù)組,數(shù)組的元素的先后順序就是單詞的順序
    // 2. 對數(shù)組進行遍歷,然后每個元素進行反轉
    return str.match(/[\w']+/g).map(item => {
        return item.split('').reverse().join('');
    }).join(' ');
}

題目:696. 計數(shù)二進制子串

思路:從字符串開始位置尋找滿足條件的子字符串,一旦找到之后,從字符串的第二個位置開始再尋找一遍,以此類推直到最后。

function match(str) {
    // 從字符串頭部開始尋找一個及以上的0,或者一個及以上的1
    // 找到之后把結果中的第一個字符串拿出來
    let j = str.match(/^(0+|1+)/)[0];
    // 生成相同個數(shù)的1或者0字符串(取決于上一步的字符串是0,還是1,這里是與之相反的)
    let o = (j[0] ^ 1).toString().repeat(j.length);
    // 生成正則匹配連續(xù)的j和o
    let reg = new RegExp(`^(${j}${o})`);
    // 如果匹配到字符串,就返回結果,沒找到就返回空字符串
    if (reg.test(str)) {
        return RegExp.$1;
    } else {
        return '';
    }
}

function subStr(str) {
    // 建立數(shù)據(jù)結構,堆棧,保存數(shù)據(jù)
    let r = [];
    // 通過for循環(huán)控制程序運行的流程
    for (let i = 0; i < str.length - 1; i++) {
        let sub = match(str.slice(i));
        sub && r.push(sub);
    }
    return r;
}

export default subStr;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。