題目: 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;