Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Last active August 29, 2015 14:01
Show Gist options
  • Save jikeytang/f46ce22363dedecb8a13 to your computer and use it in GitHub Desktop.
Save jikeytang/f46ce22363dedecb8a13 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140522-题目2
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
3. 经测试,test方法轻松获胜。
http://jsperf.com/only-occur-once
@jikeytang
Copy link
Author

function find(str){
    var arr = str.split(''), one;
    for(var i = 0; i < arr.length; i++){
        one = arr[i];
        if((str.split(one).length - 1) == 1){
            return one;
        }

    }
}
console.log(find('abaccdeff'));

@rambo-panda
Copy link

var get_one = function(str){
    str = str || 'abaccedf';
    var one, i =0;

    do{
        one = str.charAt(i);
        if(!one || str.split(one).length ===2){
            return !one ? null : one;   //  有人知道 String.prototype.split   算法复杂度吗?  总感觉这样写复杂度也会很大啊
        }
        i++;
    }while(1)
}

@mailzwj
Copy link

mailzwj commented May 22, 2014

function getOneChar(str) {
    for (var i = 0, len = str.length; i < len; i++) {
        if (str.split(str.charAt(i)).length === 2) {
            return str.charAt(i);
        }
    }
}
getOneChar("abaccedf"); // b

@jikeytang
Copy link
Author

@mailzwj getonechar 给力。

@sunnylost
Copy link

//没有找到纯正则的解决办法
var str = 'abaebaccdeff';
var r   = /(.).*\1+/;
var m;

while(m = str.match(r)) {
    str = str.replace(new RegExp(m[1], 'g'), '');
}

console.log(str[0]);

@PandaWu
Copy link

PandaWu commented May 22, 2014

//可惜js只支持?=和?!两种断言,如果是找重复出现的字符就简单了"abaccdeff".match(/(.)(?=.*\1)/gi)
function getUniqueChars(s) {
    var result = s;
    s.replace(/(.)(?=.*\1)/gi, function (match) {
        result = result.replace(new RegExp(match, "gi"), "");
    });
    return result;
}

getUniqueChars("abaccdeff")[0];

@wsgouwan
Copy link

        function getChar( str ){
        for( var i=0; i < str.length; i ++ ){
            var judge = true;

            for( j = 0; j <str.length; j ++ ){
                if( i == j  ) continue ;
                if( str[i] == str[j] ){
                    judge = false;
                    break;
                }
            };

            if( judge ) return str[i]
        }
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment