1.判断回文
solution01:栈为空则元素入栈,与栈顶不同的元素入栈,与栈中的元素对比
solution02:双指针,设置左右标记,左右相比,只要有一个不相等,则不是回文
package p2.Linearstru;
public class JudgingPalindrome {
public static void main(String[] args) {
solution01();
System.out.println(solution02());
}
private static boolean solution02() {
String text = "上海自来水来自海上";//112233
int i = 0;
int j = text.length() - 1;
while (true) {
if (text.charAt(i) == text.charAt(j)) {
i++;
j--;
} else {
return false;
}
if (j <= i) {
return true;
}
}
}
private static void solution01() {
String text = "上海自来水来自海上"; //112233
ArrayStack<Character> stack = new ArrayStack<>();
for (int i = 0; i < text.length(); i++) {
if (text.length() % 2 == 1 && i == text.length() / 2) {
continue;
}
char c = text.charAt(i);
if (stack.isEmpty()) {
stack.push(c);
} else {
if (c != stack.peek()) {
stack.push(c);
} else {
stack.pop();
}
}
}
System.out.println(stack.isEmpty());
}
}
2.符号匹配问题
{[(<>)<>]}
solution01:用差值来判断
solution02:hashmap键值对(通过键来找值)
package p2.Linearstru;
import java.util.HashMap;
public class MatchBracket{
public static void main(String[] args) {
solution01();
solution02();
}
private static void solution02() {
String str = "{()[[()]]<{()>}()";
HashMap<Character,Character> map = new HashMap<>();
map.put('[',']');
map.put('<','>');
map.put('(',')');
map.put('{','}');
ArrayStack<Character> stack = new ArrayStack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (stack.isEmpty()) {
stack.push(c);
} else {
char top = stack.peek();
if (map.containsKey(top) && c == map.get(']')) {
stack.pop();
} else {
stack.push(c);
}
}
}
System.out.println(stack.isEmpty());
}
private static void solution01() {
String str = "{()[[()]]<>{}()<>}()";
ArrayStack<Character> stack = new ArrayStack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (stack.isEmpty()) {
stack.push(c);
} else {
char top = stack.peek();
if (top - c == -1 || top - c == -2) {
stack.pop();
} else {
stack.push(c);
}
}
}
System.out.println(stack.isEmpty());
}
}