西伯利亚狼

西伯利亚狼 查看完整档案

深圳编辑  |  填写毕业院校  |  填写所在公司/组织 github.com/DragonHom/ 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

西伯利亚狼 赞了文章 · 2017-09-07

【译】JS基础算法脚本:回文检测

需求

给出一个字符串,检测是否是回文,是则返回true,不是则返回false(忽略标点符号,大小写,空格)

palindrome("A man, a plan, a canal. Panama") should return true.
palindrome("five|\_/|four")

思路1

  1. 返回一个忽略标点,空格,小写的新字符串

  2. for-if 来检测前后索引字符是否相等

function palindrome(str) {
    str = str.replace(/[\W_]/g,"").toLowerCase();
    for(var i = 0,len = str.length -1 ; i < str.length/2; i++) {
        if(str[i] !== str[len-i]) {
            return false;
        }
    }
    
    return true;
}

palindrome("almostomla");
palindrome("five|\_/|four");
palindrome("_eye");
//0.1279296875ms

思路2

  1. 得到新的反转字符串,忽略标点符号,空格,大小写

  2. 比较新旧字符串

function palindrome(str) {
    return str.replace(/[\W_]/g,'').toLowerCase() ===
           str.replace(/[\W_]/g,'').toLowerCase().split('').reverse().join('');
}

palindrome("almostomla");
palindrome("five|\_/|four");
palindrome("_eye");
//0.001953125ms

思路三

  1. Cyclomatic Complexity循环复杂度

  2. Divide and Conquer分治算法

function palindrome(str) {
  let front = 0;
  let back = str.length - 1; //match匹配是按索引查找的,所以要-1

  while (back > front) { //避免重复
    //从前往后查找符合条件的字符
    while ( str[front].match(/[\W_]/) ) {
      front++;
      continue;
    }
    //从后往前查找符合条件的字符
    while ( str[back].match(/[\W_]/) ) {
      back--;
      continue;
    }
    //忽略大小写,比较前后字符
    if ( str[front].toLowerCase() !== str[back].toLowerCase() ) {
        return false
    };
    //继续循环
    front++;
    back--;
  }
  
  return true;
}
palindrome("almostomla");
palindrome("five|\_/|four");
palindrome("_eye");
// 0.19580078125ms

相关:

str.replace(regexp|substr, newSubstr|function)
  • replace() 方法返回一个由newSubstr|function替换substr|regexp的新字符串。该方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。

str.toLowerCase()
  • 返回一个新的字符串,表示串转换为小写的调用字符。toLowerCase 不会影响字符串本身的值。

str.split([separator[, limit]])
  • 返回一个包含子字符的数组,separator确定分割位置。不影响原字符串。

arr.join(separator)
  • 将数组中所有子元素拼接成一个字符串,不改变原数组。separator,默认为","

正则表达式

有其他好的方法或思路的道友,不妨在沙发区神交一番。
思路三,有人说他是最好的方案,为什么速度并不快
以及分而治之的思想,复杂度问题,哪位大牛交流下体会^q^

查看原文

赞 2 收藏 4 评论 0

西伯利亚狼 赞了文章 · 2017-07-12

7月份前端资源分享

更多资源请Star:https://github.com/maidishike...

文章转自:https://github.com/jsfront/mo...

7月份前端资源分享

1. Javascript

2. 移动Javascript开发

3. Html5

4. CSS

5. Angular

6. React, Webpack

7. Vue

7.1 Vue资源

8. jQuery

9. 看书学习 | 成长

10. Git | Github | SVN | FTP

11. 创业 | 职场 | 管理 | 产品 | 运营

12. IDE,编辑器,调试等工具类

13. 前端架构及工程化等

14. Nodejs

15. UI

16. 性能优化教程

17. Hybrid App

查看原文

赞 239 收藏 1831 评论 15

西伯利亚狼 回答了问题 · 2017-07-09

使用git push时出现error: src refspec master does not match any. 是什么原因

git add . 会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件.

关注 4 回答 4

西伯利亚狼 关注了问题 · 2017-07-09

使用git push时出现error: src refspec master does not match any. 是什么原因

使用git push是,采用以下步骤:

git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/focusor/focusor.github.io.git
git push -u origin master

产生如下错误:

error: src refspec master does not match any. 
error: failed to push some refs to "xxxxxxx"

然后用如下方法解决了:

git add .
git commit -m "write your meaaage"

之后push就成功了,具体原因是什么呢?

关注 4 回答 4

认证与成就

  • 获得 0 次点赞
  • 获得 0 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 0 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-06-13
个人主页被 36 人浏览