1.最长公共前缀
题目链接:14. 最长公共前缀 - 力扣(LeetCode)
解法一:两两作比较
先找出第一个字符串,与下一个字符串找相同,将相同的部分定义为ret,再将相同的部分跟其他的字符串依次比较,通过不断的更新ret,最后找到相同的部分
class Solution {
public String longestCommonPrefix(String[] strs) {
String ret =strs[0];
for(int i=0;i<strs.length;i++){
ret=findCommon(strs[i],ret);
}
return ret;
}
public String findCommon(String s1,String s2){
int i=0;
while(i < Math.min(s1.length(),s2.length()) && s1.charAt(i)==s2.charAt(i)){
i++;
}
return s1.substring(0,i);
}
}
解法二:整体作比较
以第一个字符串作为标准,将每一个的字符串的首字符作比较,然后依次比较其他的字符
class Solution {
public String longestCommonPrefix(String[] strs) {
for(int i=0;i<strs[0].length();i++){
char a=strs[0].charAt(i);
for(int j=1;j<strs.length;j++){
// 因为有些字符串可能短,没有第一个字符串长,所以我们需要判断当前j所在的字符串的长度是否和i的长度相同
if(i==strs[j].length() || strs[j].charAt(i)!=a){
return strs[0].substring(0,i);
}
}
}
return strs[0];
}
}
2.最长的回文子串
class Solution {
public String longestPalindrome(String s) {
int len =0;
int begin =0;
int n=s.length();
for(int i=0;i<n;i++){
int left=i;
int right=i;
while(left>=0 && right<n && s.charAt(left)==s.charAt(right)){
left--;
right++;
if(right-left-1>len){
begin=left+1;
len=right-left-1;
}
}
left=i;
right=i+1;
while(left>=0 && right<n && s.charAt(left)==s.charAt(right)){
left--;
right++;
if(right-left-1>len){
begin=left+1;
len=right-left-1;
}
}
}
return s.substring(begin,begin+len);
}
}
3.二进制求和
用t%2来判断是否相加,用t/2来判断是否进位
class Solution {
public String addBinary(String a, String b) {
StringBuffer ret=new StringBuffer();
int cur1=a.length()-1;
int cur2=b.length()-1;
int t=0;
while(cur1>=0 || cur2>=0 || t!=0){
if(cur1>=0){
t+=a.charAt(cur1--)-'0';
}
if(cur2>=0){
t+=b.charAt(cur2--)-'0';
}
ret.append((char)('0'+(char)(t%2)));
t/=2;
}
ret.reverse();
return ret.toString();
}
}
4.字符串相乘
class Solution {
public String multiply(String num1, String num2) {
int m=num1.length();
int n=num2.length();
char[] n1=new StringBuffer(num1).reverse().toString().toCharArray();
char[] n2=new StringBuffer(num2).reverse().toString().toCharArray();
int[] tem=new int[m+n-1];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
tem[i+j]+=(n1[i]-'0')*(n2[j] - '0');
}
}
int cur = 0, t = 0;
StringBuffer ret = new StringBuffer();
while(cur < m + n - 1 || t != 0){
if(cur < m + n - 1) {
t += tem[cur++];
}
ret.append((char)(t % 10 + '0'));
t /= 10;
}
while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0'){
ret.deleteCharAt((ret.length() - 1));
}
return ret.reverse().toString();
}
}
希望能对大家有所帮助!!!!!