基础算法之"字符串类"
题目: 557. 反转字符串中的单词 III
思路:先根据空格把字符串装换为数组,然后翻转数组中每一项字符串的字符顺序,最后再组装成字符串
方法1:使用split(' ')分隔字符串
// 功能实现
export default (str) => {
// 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
let arr = str.split(' ');
// 对数组进行遍历,然后每个元素进行反转
let result = arr.map(item => {
return item.split('').reverse().join('');
});
return result.join(' ');
}// 更优雅的写法
export default (str) => {
// 1. 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
// 2. 对数组进行遍历,然后每个元素进行反转
return str.split(' ').map(item => {
return item.split('').reverse().join('');
}).join(' ');
}
方法2:使用split(/\s/g)分隔字符串
export default (str) => {
// 1. 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
// 2. 对数组进行遍历,然后每个元素进行反转
return str.split(/\s/g).map(item => {
return item.split('').reverse().join('');
}).join(' ');
}
方法3:使用match(/[\w']+/g)匹配单词
export default (str) => {
// 1. 匹配字符串中的单词,保存数组,数组的元素的先后顺序就是单词的顺序
// 2. 对数组进行遍历,然后每个元素进行反转
return str.match(/[\w']+/g).map(item => {
return item.split('').reverse().join('');
}).join(' ');
}
题目:696. 计数二进制子串 【基础算法之"字符串类"】思路:从字符串开始位置寻找满足条件的子字符串,一旦找到之后,从字符串的第二个位置开始再寻找一遍,以此类推直到最后。
function match(str) {
// 从字符串头部开始寻找一个及以上的0,或者一个及以上的1
// 找到之后把结果中的第一个字符串拿出来
let j = str.match(/^(0+|1+)/)[0];
// 生成相同个数的1或者0字符串(取决于上一步的字符串是0,还是1,这里是与之相反的)
let o = (j[0] ^ 1).toString().repeat(j.length);
// 生成正则匹配连续的j和o
let reg = new RegExp(`^(${j}${o})`);
// 如果匹配到字符串,就返回结果,没找到就返回空字符串
if (reg.test(str)) {
return RegExp.$1;
} else {
return '';
}
}function subStr(str) {
// 建立数据结构,堆栈,保存数据
let r = [];
// 通过for循环控制程序运行的流程
for (let i = 0;
i < str.length - 1;
i++) {
let sub = match(str.slice(i));
sub && r.push(sub);
}
return r;
}export default subStr;
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息