剑指 Offer 50:第一个只出现一次的字符

第一个只出现一次的字符

在这里插入图片描述
核心解题思路:运用字母的ASCII码值来进行比对

  • 解题思路:先判断字符串为空的一种情况(比较简单)。接着开始分析怎么才能取出只出现一次的元素们,再接着考虑将在这些元素里第一个出现的return出来
  1. 设定一个用来比对的字符“a",ASCII码值为97(swift里可以调用asciiValue方法来得出字母的ASCII码值)
  2. 设定一个用来存储原字符串中各(字母)元素出现次数的数组,数组初始化将所有元素置为0。
  3. 进行字符串内的遍历循环,用字符的ASCII码值和“a”的差值作为数组元素的下标,用该字符重复出现的次数作为对应数组元素的值。即依次可得到原字符串中各元素出现的次数。
  4. 完成上述次数录入后,再次依次进行遍历循环,可知字符对应数组元素为1的值即为出现一次的字符。由于是按顺序遍历,那么return得到的字符即为要求的第一个只出现一次的字符。

代码实现(swift)

class Solution {
    func firstUniqChar(_ s: String) -> Character {
    let a : Character = "a"
     let a_ascii =  a.asciiValue
    //情况一:判空
    if s.count == 0 {
      return " "
    }
    var arr = Array(repeating:0,count:26) //创建了26个元素个个值全为0的数组
    for char in s {
        let tem = Int(char.asciiValue! - a_ascii!)//强制解包,否则将返回一个可选数据类型报错
        arr[tem] += 1
    }
    for char in s {
        let tem = Int(char.asciiValue! - a_ascii!)
        if arr[tem] == 1 {
            return char
        }
    }
  return " "
    }
}

版权声明:本文为qq_51466163原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。