leetcode题解-字符串中的第一个唯一字符 & 有效的字母异位词 & 验证回文字符串

字符串中的第一个唯一字符

代码

var firstUniqChar = function(s) {
    let map = {};
    let t = [];
    for(let i=0,l=s.length;i<l;i++){
     if(map[s[i]]===undefined){
            map[s[i]] =t.length;
            t.push(i);
        }else{
            t[map[s[i]]] = null;
        }
    }
    for(let i=0,l=t.length;i<l;i++){
        if(t[i]!=null){
            return t[i]
        }   
    }
    return -1
};

思路

利用map表
key 值代表 字母
value 存放该字母的位置
一个辅助数组t
如果字母不在map表中 把位置push到t[]中 如果map中存在 把t中对应位置设置为null
最后只要找 辅助数组 t中第一个不为null的数字 就是所求位置

有效的字母异位词

代码

var isAnagram = function(s, t) {
    if(s.length!==t.length){
       return false
    }
    if(s===t){
        return true
    }
    let l = s.length;
    let map1 = {};
    let map2 = {};
    for(let i = 0;i<l;i++){
        if(!map1[s[i]]){
            map1[s[i]] =1 
        }else{
            map1[s[i]] +=1
        }
        if(!map2[t[i]]){
            map2[t[i]] =1 
        }else{
            map2[t[i]] +=1 
        }
    }
    for (let item in map1){
        if(!map2[item]||map1[item]!=map2[item]){
            return false
        }
    }
    return true
};

思路

利用map 字母一个只有26个。先把两个字符串分别映射到map表中
只要判断两个map表是否相同
最大次数 l*2+26次

验证回文字符串

代码

var isPalindrome = function(s) {
  s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
  let l = 0, r = s.length - 1;
  while (l < r) {
    if (s[l]!==s[r]) {
      return false
    }
    l++
    r--
  }
  return true
};

思路

[^0-9a-zA-Z] 负值正则 意思是 除0-9a-zA-Z 之外的
双指针 一个指针从前向后 一个从后向前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值