Skip to content

Commit d061c16

Browse files
authored
Merge branch 'youngyangyang04:master' into master
2 parents c5c8fe5 + 6de5da7 commit d061c16

File tree

3 files changed

+66
-27
lines changed

3 files changed

+66
-27
lines changed

problems/0131.分割回文串.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,5 +587,57 @@ func partition(_ s: String) -> [[String]] {
587587
}
588588
```
589589

590+
## Rust
591+
592+
```rust
593+
impl Solution {
594+
pub fn partition(s: String) -> Vec<Vec<String>> {
595+
let mut ret = vec![];
596+
let mut path = vec![];
597+
let sub_str: Vec<char> = s.chars().collect();
598+
599+
Self::backtracing(&sub_str, 0, &mut ret, &mut path);
600+
601+
ret
602+
}
603+
604+
fn backtracing(sub_str: &Vec<char>, start: usize, ret: &mut Vec<Vec<String>>, path: &mut Vec<String>) {
605+
//如果起始位置大于s的大小,说明找到了一组分割方案
606+
if start >= sub_str.len() {
607+
ret.push(path.clone());
608+
return;
609+
}
610+
611+
for i in start..sub_str.len() {
612+
if !Self::is_palindrome(sub_str, start, i) {
613+
continue;
614+
}
615+
//如果是回文子串,则记录
616+
let s: String = sub_str[start..i+1].into_iter().collect();
617+
path.push(s);
618+
619+
//起始位置后移,保证不重复
620+
Self::backtracing(sub_str, i+1, ret, path);
621+
path.pop();
622+
}
623+
624+
}
625+
626+
fn is_palindrome(s: &Vec<char>, start: usize, end: usize) -> bool {
627+
let (mut start, mut end) = (start, end);
628+
629+
while start < end {
630+
if s[start] != s[end] {
631+
return false;
632+
}
633+
634+
start += 1;
635+
end -= 1;
636+
}
637+
638+
true
639+
}
640+
}
641+
```
590642
-----------------------
591643
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

problems/0150.逆波兰表达式求值.md

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -133,39 +133,26 @@ public:
133133
java:
134134
135135
```Java
136-
public class EvalRPN {
137-
136+
class Solution {
138137
public int evalRPN(String[] tokens) {
139138
Deque<Integer> stack = new LinkedList();
140-
for (String token : tokens) {
141-
char c = token.charAt(0);
142-
if (!isOpe(token)) {
143-
stack.addFirst(stoi(token));
144-
} else if (c == '+') {
145-
stack.push(stack.pop() + stack.pop());
146-
} else if (c == '-') {
147-
stack.push(- stack.pop() + stack.pop());
148-
} else if (c == '*') {
149-
stack.push( stack.pop() * stack.pop());
139+
for (int i = 0; i < tokens.length; ++i) {
140+
if ("+".equals(tokens[i])) { // leetcode 内置jdk的问题,不能使用==判断字符串是否相等
141+
stack.push(stack.pop() + stack.pop()); // 注意 - 和/ 需要特殊处理
142+
} else if ("-".equals(tokens[i])) {
143+
stack.push(-stack.pop() + stack.pop());
144+
} else if ("*".equals(tokens[i])) {
145+
stack.push(stack.pop() * stack.pop());
146+
} else if ("/".equals(tokens[i])) {
147+
int temp1 = stack.pop();
148+
int temp2 = stack.pop();
149+
stack.push(temp2 / temp1);
150150
} else {
151-
int num1 = stack.pop();
152-
int num2 = stack.pop();
153-
stack.push( num2/num1);
151+
stack.push(Integer.valueOf(tokens[i]));
154152
}
155153
}
156154
return stack.pop();
157155
}
158-
private boolean isOpe(String s) {
159-
return s.length() == 1 && s.charAt(0) <'0' || s.charAt(0) >'9';
160-
}
161-
private int stoi(String s) {
162-
return Integer.valueOf(s);
163-
}
164-
165-
public static void main(String[] args) {
166-
new EvalRPN().evalRPN(new String[] {"10","6","9","3","+","-11","*","/","*","17","+","5","+"});
167-
}
168-
169156
}
170157
```
171158

problems/0459.重复的子字符串.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
这里就要说一说next数组了,next 数组记录的就是最长相同前后缀( [字符串:KMP算法精讲](https://programmercarl.com/0028.实现strStr.html) 这里介绍了什么是前缀,什么是后缀,什么又是最长相同前后缀), 如果 next[len - 1] != -1,则说明字符串有最长相同的前后缀(就是字符串里的前缀子串和后缀子串相同的最长长度)。
4747

48-
最长相等前后缀的长度为:next[len - 1] + 1。
48+
最长相等前后缀的长度为:next[len - 1] + 1。(这里的next数组是以统一减一的方式计算的,因此需要+1)
4949

5050
数组长度为:len。
5151

0 commit comments

Comments
 (0)