龙空技术网

leetcode1805_go_字符串中不同整数的数目

每天都AC 67

前言:

目前各位老铁们对“c语言字符串计数”都比较注意,朋友们都需要了解一些“c语言字符串计数”的相关内容。那么小编也在网摘上网罗了一些有关“c语言字符串计数””的相关知识,希望姐妹们能喜欢,同学们快快来了解一下吧!

题目

给你一个字符串 word ,该字符串由数字和小写英文字母组成。

请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。

注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123"、"34"、"8" 和 "34" 。

返回对 word 完成替换后形成的 不同 整数的数目。

只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。

示例 1:输入:word = "a123bc34d8ef34" 输出:3

解释:不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次。

示例 2:输入:word = "leet1234code234" 输出:2

示例 3:输入:word = "a1b01c001" 输出:1

解释:"1"、"01" 和 "001" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。

提示:1 <= word.length <= 1000

word 由数字和小写英文字母组成

解题思路分析

1、内置函数;时间复杂度O(n),空间复杂度O(n)

func numDifferentIntegers(word string) int {   m := make(map[string]bool)   arr := strings.FieldsFunc(word, func(r rune) bool {      return 'a' <= r && r <= 'z'   })   for i := 0; i < len(arr); i++ {      s := strings.Trim(arr[i], " ")      for len(s) > 0 && s[0] == '0' {         s = s[1:]      }      m[s] = true   }   return len(m)}

2、遍历;时间复杂度O(n),空间复杂度O(n)

func numDifferentIntegers(word string) int {   m := make(map[int]bool)   for i := 0; i < len(word); i++ {      if '0' <= word[i] && word[i] <= '9' {         value := int(word[i] - '0')         for i+1 < len(word) && '0' <= word[i+1] && word[i+1] <= '9' {            i++            value = value*10 + int(word[i]-'0')         }         m[value] = true      }   }   return len(m)}
总结

Easy题目,熟练使用内置函数,也可以遍历,借助map去重

标签: #c语言字符串计数