Skip to content

Commit 095b94d

Browse files
ChunelFengjunfeng.fj
and
junfeng.fj
authored
增加了[lcof-48.最长不含重复字符的子字符串]和[lcof-61.扑克牌中的顺子]的cpp写法,基本双优 (doocs#344)
Co-authored-by: junfeng.fj <junfeng.fj@alibaba-inc.com>
1 parent 9316a3c commit 095b94d

File tree

4 files changed

+128
-0
lines changed

4 files changed

+128
-0
lines changed

lcof/面试题48. 最长不含重复字符的子字符串/README.md

+38
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,44 @@ var lengthOfLongestSubstring = function (s) {
124124
};
125125
```
126126

127+
### **C++**
128+
129+
```cpp
130+
class Solution {
131+
public:
132+
int lengthOfLongestSubstring(string s) {
133+
int arr[1024]; // 本题的用例中,有不为小写字母的情况
134+
for (int i = 0; i < 1024; i++) {
135+
arr[i] = -1;
136+
}
137+
138+
int curLen = 0;
139+
int maxLen = 0;
140+
141+
int len = s.size();
142+
for (int i = 0; i < len; i++) {
143+
int prev = arr[int(s[i])]; // 之前位置的index
144+
if (prev < 0 || i - prev > curLen) {
145+
// 其中,prev>0表示之前没有遇到过该字符
146+
// i - prev > curLen 表示之前遇到的当前字符,远超当前限定的范围
147+
// 这两种情况下,都是直接继续加就可以了
148+
curLen++;
149+
} else {
150+
if (curLen > maxLen) {
151+
maxLen = curLen;
152+
}
153+
curLen = i - prev; // curLen重新开始计数
154+
}
155+
156+
arr[int(s[i])] = i;
157+
}
158+
159+
return maxLen > curLen ? maxLen : curLen;
160+
}
161+
};
162+
163+
```
164+
127165
### **...**
128166

129167
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public:
3+
int lengthOfLongestSubstring(string s) {
4+
int arr[1024]; // 本题的用例中,有不为小写字母的情况
5+
for (int i = 0; i < 1024; i++) {
6+
arr[i] = -1;
7+
}
8+
9+
int curLen = 0;
10+
int maxLen = 0;
11+
12+
int len = s.size();
13+
for (int i = 0; i < len; i++) {
14+
int prev = arr[int(s[i])]; // 之前位置的index
15+
if (prev < 0 || i - prev > curLen) {
16+
// 其中,prev>0表示之前没有遇到过该字符
17+
// i - prev > curLen 表示之前遇到的当前字符,远超当前限定的范围
18+
// 这两种情况下,都是直接继续加就可以了
19+
curLen++;
20+
} else {
21+
if (curLen > maxLen) {
22+
maxLen = curLen;
23+
}
24+
curLen = i - prev; // curLen重新开始计数
25+
}
26+
27+
arr[int(s[i])] = i;
28+
}
29+
30+
return maxLen > curLen ? maxLen : curLen;
31+
}
32+
};

lcof/面试题61. 扑克牌中的顺子/README.md

+32
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,38 @@ var isStraight = function (nums) {
110110
};
111111
```
112112

113+
### **C++**
114+
115+
```cpp
116+
class Solution {
117+
public:
118+
bool isStraight(vector<int>& nums) {
119+
if (nums.size() != 5) {
120+
return false;
121+
}
122+
123+
std::sort(nums.begin(), nums.end());
124+
int zeroNum = 0;
125+
for (int i = 0; i < nums.size(); i++) {
126+
if (nums[i] != 0) {
127+
// 这题的用例中,会出现超过两个0的情况
128+
break;
129+
}
130+
zeroNum++;
131+
}
132+
133+
for (int i = zeroNum; i < nums.size()-1; i++) {
134+
if (nums[i] == nums[i+1]) {
135+
return false;
136+
}
137+
}
138+
139+
return nums[4] - nums[zeroNum] <= 4;
140+
}
141+
};
142+
143+
```
144+
113145
### **...**
114146

115147
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
bool isStraight(vector<int>& nums) {
4+
if (nums.size() != 5) {
5+
return false;
6+
}
7+
8+
std::sort(nums.begin(), nums.end());
9+
int zeroNum = 0;
10+
for (int i = 0; i < nums.size(); i++) {
11+
if (nums[i] != 0) {
12+
// 这题的用例中,会出现超过两个0的情况
13+
break;
14+
}
15+
zeroNum++;
16+
}
17+
18+
for (int i = zeroNum; i < nums.size()-1; i++) {
19+
if (nums[i] == nums[i+1]) {
20+
return false;
21+
}
22+
}
23+
24+
return nums[4] - nums[zeroNum] <= 4;
25+
}
26+
};

0 commit comments

Comments
 (0)