Skip to content

Commit d899cab

Browse files
committed
finish the week 09 homework
1 parent 4bef67a commit d899cab

8 files changed

Lines changed: 162 additions & 1 deletion

File tree

Week09/NOTE.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
1-
学习笔记
1+
学习笔记
2+
3+
# 第九周学习笔记
4+
5+
## 不同路径II状态转移方程
6+
1. 状态定义
7+
dp[i][j] 表示走到格子(i, j)的方法数
8+
2. 状态转义
9+
(i, j)上有障碍物 dp[i][j] = 0
10+
(i, j)上无障碍物 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

Week09/firstUniqChar.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* 字符串中的第一个唯一字符
3+
* @param {string} s
4+
* @return {number}
5+
*/
6+
var firstUniqChar = function(s) {
7+
let map = new Map();
8+
for (let i = 0; i < s.length; ++i) {
9+
let c = s.charAt(i);
10+
map.has(c) ? map.set(c, map.get(c) + 1) : map.set(c, 1);
11+
}
12+
for (let i = 0; i < s.length; ++i) {
13+
if (map.get(s.charAt(i)) == 1) return i;
14+
}
15+
return -1;
16+
};

Week09/isIsomorphic.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* 同构字符串
3+
* @param {string} s
4+
* @param {string} t
5+
* @return {boolean}
6+
*/
7+
var isIsomorphic = function(s, t) {
8+
let mapS = new Map();
9+
let mapT = new Map();
10+
for (let i = 0; i < s.length; ++i) {
11+
let c1 = s.charAt(i);
12+
let c2 = t.charAt(i);
13+
if (mapS.get(c1) != mapT.get(c2)) return false;
14+
if (!mapS.has(c1)) {
15+
mapS.set(c1, i + 1);
16+
mapT.set(c2, i + 1);
17+
}
18+
}
19+
return true;
20+
};

Week09/reverseOnlyLetters.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* 仅仅反转字母
3+
* @param {string} S
4+
* @return {string}
5+
*/
6+
var reverseOnlyLetters = function(S) {
7+
let left = 0, right = S.length - 1;
8+
S = S.split('');
9+
while (left < right) {
10+
if (!check(S[left])) left++
11+
else if (!check(S[right])) right--;
12+
else if (check(S[left]) && check(S[left])) {
13+
let temp = S[left];
14+
S[left] = S[right];
15+
S[right] = temp;
16+
left++;
17+
right--;
18+
}
19+
}
20+
return S.join('');
21+
function check(s) {
22+
return /[a-zA-Z]/.test(s);
23+
}
24+
};

Week09/reverseStr.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* 反转字符串||
3+
* @param {string} s
4+
* @param {number} k
5+
* @return {string}
6+
*/
7+
var reverseStr = function(s, k) {
8+
let i = 0, j = k - 1;
9+
s = s.split('');
10+
for (let i = 0; i <= s.length; i += 2*k) {
11+
reverse(i, i + k - 1);
12+
}
13+
14+
function reverse(left, right) {
15+
while (left < right) {
16+
let temp = s[left];
17+
s[left] = s[right];
18+
s[right] = temp;
19+
left++;
20+
right--;
21+
}
22+
}
23+
return s.join('');
24+
};

Week09/reverseWords.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* 翻转字符串里头的单词
3+
* @param {string} s
4+
* @return {string}
5+
*/
6+
var reverseWords = function(s) {
7+
let left = 0, right = s.length - 1;
8+
while (left < right && s.charAt(left) == " ") ++left;
9+
while (left < right && s.charAt(right) == " ") --right;
10+
11+
let deque = [], word = [];
12+
while (left <= right) {
13+
let c = s.charAt(left);
14+
if (word.length != 0 && c == " ") {
15+
deque.unshift(word.join(''));
16+
word = [];
17+
} else if (c != " "){
18+
word.push(c);
19+
}
20+
++left;
21+
}
22+
deque.unshift(word.join(''));
23+
return deque.join(" ");
24+
};

Week09/reversewords3.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* 反转字符串中的单词 III
3+
* @param {string} s
4+
* @return {string}
5+
*/
6+
var reverseWords = function(s) {
7+
let left = 0, right = s.length - 1;
8+
9+
let res = [], word = [];
10+
while (left <= right) {
11+
if (s.charAt(left) != " ") {
12+
word.unshift(s.charAt(left));
13+
}
14+
if (s.charAt(left) == " " && word.length) {
15+
res.push(word.join(''));
16+
word = [];
17+
res.push (" ");
18+
} else if (s.charAt(left) == " ") {
19+
res.push(" ");
20+
}
21+
left++;
22+
}
23+
res.push(word.join(''));
24+
return res.join('');
25+
};

Week09/validPalindrome.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* 验证回文字符串II
3+
* @param {string} s
4+
* @return {boolean}
5+
*/
6+
var validPalindrome = function(s) {
7+
let left = 0, right = s.length - 1;
8+
while (left < right && s.charAt(left) == s.charAt(right)) {
9+
left++, right--;
10+
}
11+
return palindrome(left + 1, right) || palindrome(left, right - 1);
12+
13+
function palindrome(left, right) {
14+
while (left < right && s.charAt(left) == s.charAt(right)) {
15+
left++, right--;
16+
}
17+
return left >= right;
18+
}
19+
};

0 commit comments

Comments
 (0)