程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode 3 Longest Substring Without Repeating Characters(最長不重復子序列),leetcoderepeating

LeetCode 3 Longest Substring Without Repeating Characters(最長不重復子序列),leetcoderepeating

編輯:C++入門知識

LeetCode 3 Longest Substring Without Repeating Characters(最長不重復子序列),leetcoderepeating


題目來源:https://leetcode.com/problems/longest-substring-without-repeating-characters/

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1

解題思路:

用一個start來記錄目前字符串的開頭 用exist[MAX]來記錄目前字符串中出現過的字母 用pos[MAX]來記錄出現過的字符串的字母的位置   然後我們往後走一位,然後和exist來比較看這個字母是否已經出現過了。   1 如果出現過了,那麼我們把start移動到之前那個字母出現的位置的後一位,end往後移動一位 2 如果沒有出現過,那麼我們就把end往後移動一位 提交代碼:
 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         int locs[256];//保存字符上一次出現的位置
 7         memset(locs, -1, sizeof(locs));
 8 
 9         int idx = -1, max = 0;//idx為當前子串的開始位置-1
10         for (int i = 0; i < s.size(); i++)
11         {
12             if (locs[s[i]] > idx)//如果當前字符出現過,那麼當前子串的起始位置為這個字符上一次出現的位置+1
13             {
14                 idx = locs[s[i]];
15             }
16 
17             if (i - idx > max)
18             {
19                 max = i - idx;
20             }
21 
22             locs[s[i]] = i;
23         }
24         return max;
25     }
26 };

其他解題方法:

 1 #include <bits/stdc++.h>
 2 #define MAX 110
 3 
 4 using namespace std;
 5 
 6 int pos[MAX], exist[MAX];
 7 
 8 int main()
 9 {
10     string s;
11     int lens,i,j,start,max_num;
12     while(cin>>s)
13     {
14         lens=s.size();
15         max_num=0,start=0;
16         memset(pos,0,sizeof(pos));
17         memset(exist,0,sizeof(exist));
18         for(i=0;i<lens;i++)
19         {
20             if(exist[s[i]-'a'])
21             {
22                 for(j=start;j<=pos[s[i]-'a'];j++)
23                     exist[s[j]-'a']=0;
24                 start=pos[s[i]-'a']+1;
25                 exist[s[i]-'a']=1;
26                 pos[s[i]-'a']=i;
27             }
28             else
29             {
30                 exist[s[i]-'a']=1;
31                 pos[s[i]-'a']=i;
32                 max_num=max(max_num,i-start+1);
33             }
34         }
35         printf("%d\n",max_num);
36     }
37 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved