题目链接
Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.
Examples:
s = “leetcode”
return 0.
s = “loveleetcode”,
return 2.
Note:
You may assume the string contain only lowercase letters.
python代码实现
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
s_len = len(s)
if s_len == 1:
return 0
for i in range(s_len):
if s[i] == '0':
continue
elif s[i] not in s[i + 1:]:
return i
else:
s = s.replace(s[i], '0', s.count(s[i]))
return -1
#
# class Solution:
# def firstUniqChar(self, s):
# """
# :type s: str
# :rtype: int
# """
# if len(s) == 1:
# return 0
# for key, item in enumerate(s):
# s_s = s[key + 1:]
# if item not in s_s and key != len(s) - 1:
# return key
# elif item == '0':
# continue
# else:
# s = s.replace(item, '0', s.count(item))
# return -1
s = Solution()
res = s.firstUniqChar("aadadaad")
print(res)
此题总结:
- 注意注释部分是错误的写法,这种写法的错误主要导致原因是enumerate这个装箱函数导致的。因为把字符串装入enumerate之后,字符串就被封闭起来了,那么在外面对这个字符串的修改也不会影响装箱里面的那个字符串。
- 而非注释部分则通过对字符串的修改会影响当前遍历的字符串。
JavaScript代码实现:
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
let s_len = s.length
if(s_len === 1)
return 0
for(let i=0;i<s_len;i++){
if(s[i] === '0'){
continue
}else if(s.substring(i+1).indexOf(s[i])=== -1){
return i
}else{
s = s.replace(new RegExp(s[i],'g'), '0')
}
}
return -1
};
javascript代码总结
在JavaScript字符串替换中:
#只替换第一次出现的位置
var str="Visit Microsoft! Visit Microsoft!";
var n=str.replace("Microsoft","Runoob");
#用正则模式全局替换
var str="Mr Blue has a blue house and a blue car";
var n=str.replace(/blue/g,"red");
#用正则模式全局替换并忽略大小写
var str="Mr Blue has a blue house and a blue car";
var n=str.replace(/blue/gi,"red");
#用正则模式全局替换变量
var str="Mr Blue has a blue house and a blue car";
let temp = 'blue'
var n=str.replace(new RegExp(temp,'g'),"red");