• 算法笔试:返回第一个不重复的字符变种,不区分大小写


    题目

    给定一个字符串,返回字符串中第一个不重复的字符,比如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基础语法以应付笔试。加油!!!

  • 相关阅读:
    写MBA毕业论文有感-重口味,不喜莫入
    Android中级第三讲如何复用AlertDialog
    Android初级开发第二讲项目学习
    那些消失的计算机技术(一)
    Android中级第一讲如何学习Android自带的demo项目
    Java基础之continue与break区别
    刨根问底系列之C++ const 挖掘
    Unity3d http 通信
    Windows Phone 7 不温不火学习之《启动器与选择器》
    Windows Phone7 不温不火学习之《应用程序生命周期》
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15583052.html
Copyright © 2020-2023  润新知