zoukankan      html  css  js  c++  java
  • 算法笔试:返回第一个不重复的字符变种,不区分大小写

    题目

    给定一个字符串,返回字符串中第一个不重复的字符,比如aBAd返回B,AbabcfA返回c,判断时不区分给定字符大小写,但返回时需要返回原本大小写(其实就是通过索引返回即可)。

    思路

    1、暴力破解
    使用双重循环,声明一个变量保存字符出现的次数,
    第二层循环中与第一层当前循环字符比较,如果相同字符出现次数++,
    如果第二层循环遍历完以后字符出现次数为1,则代表找到了第一个不重复字符,
    返回第一层循环下标位置对应的字符即可。

    2、数组存储出现次数
    使用一个长度为26的数组保存相应字符出现的次数,进行两次遍历,
    第一次遍历字符串,统计字符出现的次数,
    第二次遍历字符串,判断字符在数组中对应的值是否为1,
    如果为1则代表当前字符为第一个不重复字符,返回即可。

    不区分大小写:
    可以先把字符串统一转换成小写用一个变量保存,后续比较操作这个变量即可;
    也可以利用ASCALL码处理,小写a为97,大写A为65,两者相差32,
    判断字符为小写还是大写,如果是小写,则字符对应的数组索引为[字符-'a'],
    如果是大写,则字符对应的数组索引为[字符-'a'+32]。

    代码

    // 方法二 数组存储出现次数
    func firstUniqChar(s string) byte {
        if len(s) == 0{
            return ' '
        }
        m := [26]int{}
        for i := range s {
            m[GetIndex(s[i])] += 1
        }
        for i := range s {
            if m[GetIndex(s[i])] == 1 {
                return s[i]
            }
        }
        return ' '
    }
    
    func GetIndex(v byte) byte {
        if v >= 65 && v < 97{
            return v-'a'+32
        }
        return v-'a'
    }
    

    碎碎念

    这是我在一场笔试中的第一个算法题,由于没休息好导致当天状态不是很好,思绪有些混乱,当时想了很久,最后还没把代码写出来,原因是近一年都在学习Golang,导致其他语言的基础语法都忘了,面试Golang岗位,结果偏偏不能用Golang来做题,而且碰到过两场这样的笔试了,真的是有点无语了。
    反思自己,基础知识掌握的还不是很牢固,题还刷少了,也要补一下Java基础语法以应付笔试。加油!!!

  • 相关阅读:
    如何使用GOOGLE高级搜索技巧
    你所认为的极限,可能只是别人眼中的起点
    飞机选座——附:东航320选坐攻略
    古诗词里,从初识到相爱到分离到重逢的漫长过程
    从零开始学摄影
    Python之运维
    Linux用户和组密令大全
    centos7 下安装生物信息软件的问题小总结
    VMware锁定文件失败开启模块diskearly的操作失败未能启动虚拟机
    linux 基本命令整理--转
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15583052.html
Copyright © 2011-2022 走看看