最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#算法之無重復字符的最長子串

 更新時間:2022年01月14日 10:46:04   作者:癡者工良  
這篇文章介紹了C#算法之無重復字符的最長子串,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

題目

給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。

要注意字符串為空、變量為null、字符串長度 Length = 1 等情況。

測試實例

輸入
" "
"au"
"abcabcbb"
"bbbbb"
"pwwkew"
"aab"

預期結果分別是 1,2,3,1,3,2

代碼格式模板

public class Solution {
    public int LengthOfLongestSubstring(string s) {
         
    }
}

筆者的代碼僅供參考

使用最笨的方式,200ms左右

public class Solution {
    public int LengthOfLongestSubstring(string s) {
                    if (s == null || s == "")
                return 0;

            char[] a = s.ToCharArray();      //字符串轉為字符數組
            int start = 0;                   //區(qū)間開始位置
            int stop = 0;                    //區(qū)間結束位置
            int newMax = 1;                   //當前區(qū)間數
            int max = 1;                     //區(qū)間最大個數

            for (stop = 1; stop < a.Length; stop++)   //每次向后移動一位
            {
                bool b = false;                       //是否存在重復
                for (int i = start; i < stop; i++)  //檢查當前元素在區(qū)間是否有相同值
                {
                    if (a[stop] == a[i])        //如果stop+1位在區(qū)間找到相同的字符
                    {
                        char ls = a[stop];
                        if (newMax > max) max = newMax;
                        start = i + 1;              //區(qū)間開始位置重置
                        newMax = stop - start + 1;
                        b = true;            
                        break;
                    }
                }
                if (b == false)
                    newMax += 1;
            }
            if (newMax > max) max = newMax;
            return max;
    }
}

完整測試代碼(控制臺)

using System;

namespace ConsoleApp1
{
    public class Testa
    {
        public int LengthOfLongestSubstring(string s)
        {
            if (s == null || s == "")
                return 0;

            char[] a = s.ToCharArray();      //字符串轉為字符數組
            int start = 0;                   //區(qū)間開始位置
            int stop = 0;                    //區(qū)間結束位置
            int newMax = 1;                   //當前區(qū)間數
            int max = 1;                     //區(qū)間最大個數

            for (stop = 1; stop < a.Length; stop++)   //每次向后移動一位
            {
                bool b = false;                       //是否存在重復
                for (int i = start; i < stop; i++)  //檢查當前元素在區(qū)間是否有相同值
                {
                    if (a[stop] == a[i])        //如果stop+1位在區(qū)間找到相同的字符
                    {
                        char ls = a[stop];
                        if (newMax > max) max = newMax;
                        start = i + 1;              //區(qū)間開始位置重置
                        newMax = stop - start + 1;      //重新設置區(qū)間數
                        b = true;            
                        break;
                    }
                }
                if (b == false)             ////沒有重新設置區(qū)間數時加1
                    newMax += 1;
            }
            if (newMax > max) max = newMax;
            return max;
        }
    }
    class Program
    {


        static void Main(string[] args)
        {
            Testa t1 = new Testa();                                     //正確結果
            Console.WriteLine(t1.LengthOfLongestSubstring(" "));        //1
            Console.WriteLine(t1.LengthOfLongestSubstring("au"));       //2
            Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb")); //3
            Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb"));    //1
            Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew"));   //3
            Console.WriteLine(t1.LengthOfLongestSubstring("aab"));      //2
            Console.ReadKey();
        }
    }
}

使用哈希集合,速度更快,100ms-150ms

        public int LengthOfLongestSubstring(string s)
        {
            int n = s.Length;
            HashSet<char> set = new HashSet<char>();        //集合
            int ans = 0, start = 0, stop = 0;               //ans為字符串長度,starp區(qū)間起點,stop區(qū)間終點
            while (start < n && stop < n)
            {
                // try to extend the range [i, j]
                if (!set.Contains(s[stop]))
                {
                    set.Add(s[stop++]);
                    ans = Math.Max(ans, stop - start);
                    //或者ans = ans > (stop - start) ? ans : (stop - start)
                }
                else
                {
                    set.Remove(s[start++]);
                }
            }
            return ans;
        }

完整控制臺測試代碼

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp2
{
    public class Solution
    {
        public int LengthOfLongestSubstring(string s)
        {
            int n = s.Length;
            HashSet<char> set = new HashSet<char>();        //集合
            int ans = 0, start = 0, stop = 0;               //ans為字符串長度,starp區(qū)間起點,stop區(qū)間終點
            while (start < n && stop < n)
            {
                // try to extend the range [i, j]
                if (!set.Contains(s[stop]))
                {
                    set.Add(s[stop++]);
                    ans = Math.Max(ans, stop - start);
                    //或者ans = ans > (stop - start) ? ans : (stop - start)
                }
                else
                {
                    set.Remove(s[start++]);
                }
            }
            return ans;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            Solution t1 = new Solution();                                     //正確結果
            Console.WriteLine(t1.LengthOfLongestSubstring(" "));        //1
            Console.WriteLine(t1.LengthOfLongestSubstring("au"));       //2
            Console.WriteLine(t1.LengthOfLongestSubstring("abcabcbb")); //3
            Console.WriteLine(t1.LengthOfLongestSubstring("bbbbb"));    //1
            Console.WriteLine(t1.LengthOfLongestSubstring("pwwkew"));   //3
            Console.WriteLine(t1.LengthOfLongestSubstring("aab"));      //2
            Console.ReadKey();
        }
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#中的out關鍵字用法詳解

    C#中的out關鍵字用法詳解

    在 C# 中,out 關鍵字是一個修飾符,它允許你在方法內部創(chuàng)建一個臨時的變量,用于接收傳遞進來的參數值,并在方法執(zhí)行完畢后,將該變量的值返回給調用方法的對象,本文將給大家詳細介紹一下C#中的out關鍵字用法,需要的朋友可以參考下
    2024-02-02
  • C#調用帶結構體指針Dll的方法

    C#調用帶結構體指針Dll的方法

    在C#到底該如何安全的調用這樣的DLL接口函數呢?本文將詳細介紹如何調用各種參數的方法,對C#結構體指針DLL相關知識感興趣的朋友一起看看吧
    2021-07-07
  • C#中循環(huán)語句:while、for、foreach的使用

    C#中循環(huán)語句:while、for、foreach的使用

    本篇文章主要介紹了C#中的三種循環(huán)語句(while、for、foreach)的實現方式,需要的朋友可以參考下
    2015-07-07
  • C# 使用WPF 用MediaElement控件實現視頻循環(huán)播放

    C# 使用WPF 用MediaElement控件實現視頻循環(huán)播放

    在WPF里用MediaElement控件,實現一個循環(huán)播放單一視頻的程序,同時可以控制視頻的播放、暫停、停止。這篇文章給大家介紹了C# 使用WPF 用MediaElement控件實現視頻循環(huán)播放,需要的朋友參考下吧
    2018-04-04
  • C#實現順序棧和鏈棧的代碼實例

    C#實現順序棧和鏈棧的代碼實例

    今天小編就為大家分享一篇關于的C#實現順序棧和鏈棧的代碼實例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#使用linq計算執(zhí)行元素在列表中出現次數的方法

    C#使用linq計算執(zhí)行元素在列表中出現次數的方法

    這篇文章主要介紹了C#使用linq計算執(zhí)行元素在列表中出現次數的方法,涉及C#使用linq擴展進行列表查詢的技巧,需要的朋友可以參考下
    2015-04-04
  • C#并發(fā)編程之async和await關鍵字詳解

    C#并發(fā)編程之async和await關鍵字詳解

    對于?async?和?await?兩個關鍵字,對于一線開發(fā)人員再熟悉不過了,到處都是它們的身影,下面小編就來和大家記錄匯總下它們的使用吧
    2023-07-07
  • 解決unity rotate旋轉物體 限制物體旋轉角度的大坑

    解決unity rotate旋轉物體 限制物體旋轉角度的大坑

    這篇文章主要介紹了解決unity rotate旋轉物體 限制物體旋轉角度的大坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#通過熱鍵控制顯示器開關的方法

    C#通過熱鍵控制顯示器開關的方法

    這篇文章主要介紹了C#通過熱鍵控制顯示器開關的方法,涉及C#針對熱鍵的操作技巧,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • C#實現圖片分割方法與代碼

    C#實現圖片分割方法與代碼

    C#實現圖片分割方法與代碼...
    2007-03-03

最新評論

益阳市| 雷波县| 阳春市| 隆德县| 从江县| 特克斯县| 云安县| 凉城县| 工布江达县| 扎兰屯市| 凉山| 馆陶县| 承德县| 抚顺县| 崇文区| 辽宁省| 承德市| 鱼台县| 武宁县| 沙坪坝区| 阿鲁科尔沁旗| 华宁县| 慈利县| 大荔县| 剑河县| 苍梧县| 图木舒克市| 嘉鱼县| 周至县| 平利县| 友谊县| 宜兰市| 宾阳县| 玛沁县| 新安县| 明星| 霍山县| 太白县| 上栗县| 且末县| 乐清市|