【刷题心得】双指针法|HashSet<T>

题目

【刷题心得】双指针法|HashSet<T>_第1张图片

1 概念梳理

1.1 ISet HashSet

包含不重复元素的集合称为“集set”。.NET Framework包含两个集HashSet和SortedSet,其中HashSet包含不重复元素的无序列表,SortedSet包含不重复元素的有序列表。

ISet接口提供的方法可以创建合集,交集。

1.2 Char.IsDigit()

参考:C# Char.IsDigit()用法及代码示例 - 纯净天空 (vimsky.com)

是一种检查Unicode字符是否可以归类为十进制数,有两种:

Char.IsDigti(Char)——检查指定的字符是否为十进制数

Char.IsDigti(String, Int)——指定位置的指定字符串是否与十进制数匹配

1.3 数字问题,去除前导0

去除前导零的意思就是,有时经过判断后输出的必须是有实际意义的数字,那么“01”“0001”与1意义相同。所以需要加上一步”判断是否为0且去除“的操作。

1.4 对HashSet的操作

C# HashSet 用法_IT技术猿猴的博客-CSDN博客_c# hashset

点入链接,直接回顾一下C#中哈希添加和删除清空等修改操作。

1.5 正则表达式

参考:

正则表达式的一些术语

包括有a到z之间的字母,还有一些特殊字符。例如这道题后面还想除了一种解法,但是很奇怪用时会超出。

2 解题

老老实实用双指针,最后去除前导零就行。

public class Solution {
    public int NumDifferentIntegers(string word) {
        HashSet str = new HashSet();
        int n = word.Length;
        int p1, p2=0;
        while(true) {
            while(p2

另外在力扣网还看到了用正则巧妙地做的答案:[Java/C++] 简单模拟题 - 字符串中不同整数的数目 - 力扣(LeetCode)

class Solution {
    public int numDifferentIntegers(String word) {
        Set set = new HashSet<>();
        for (String str : word.split("[a-z]+")) if (str.length() > 0) set.add(str.replaceAll("^0+",""));
        return set.size();
    }
}

你可能感兴趣的:(刷题记录,c#)