括号序列
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
if ((s.length() & 1) == 1) {
return false;
}
char[] str = s.toCharArray();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length; i++) {
if (str[i] == '{' || str[i] == '(' || str[i] == '[') {
stack.push(str[i]);
} else {
if (stack.isEmpty()) {
return false;
}
char last = stack.pop();
if ((last == '(' && str[i] != ')') || (last == '{' && str[i] != '}') || (last == '[' && str[i] != ']')) {
return false;
}
}
}
return stack.isEmpty();
}
}
大数加法
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
int add=0;
int a=s.length()-1,b=t.length()-1;
StringBuffer sb=new StringBuffer();
while(a>=0||b>=0||add>0){
int x=a<0? 0:s.charAt(a--)-'0';
int y=b<0? 0:t.charAt(b--)-'0';
int sum=x+y+add;
sb.insert(0,sum%10);
add=sum/10;
}
return sb.toString();
}
}
反转字符串
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
import java.util.*;
public class Solution {
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
public String solve (String str) {
// write code here
char[] s=str.toCharArray();
char[] res=new char[s.length];
int j=0;
for(int i=s.length-1;i>=0;i--){
res[j++]=s[i];
}
return String.valueOf(res);
}
}
最长回文子串
对于一个字符串(仅包含小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串 A 以及它的长度 n ,请返回最长回文子串的长度。
public int getLongestPalindrome(String A, int n) {
// 第 i 个字符到第 j 个字符是否是回文串
boolean[][] dp = new boolean[n][n];
int max = 0;
// 字符串首尾字母长度差 (d = j-i)
for (int d = 0; d < n; d++) {
// 字符串起始位置 i
for (int i = 0; i < n-d; i++) {
// 字符串结束位置 j
int j = i+d;
// 如果字符串 i 到 j 的首尾相等,再根据字符串 i-1 到 j-1 来确定,即得到递推公式
if(A.charAt(i) == A.charAt(j)) {
if(d == 0 || d == 1) {
dp[i][j] = true;
} else {
dp[i][j] = dp[i+1][j-1];
}
if(dp[i][j]) {
// 更新最大长度
max = Math.max(max, d+1);
}
}
}
}
return max;
}
最长公共前缀
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀
public String longestCommonPrefix (String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.length() == 0) {
return "";
}
}
}
return prefix;
}