83 字符串变形
注意这里不能用s,split函数将空格分隔开,因为包括空格也要反转,比如“h i ”要转换成“ I H”
import java.util.*;
public class Solution {
public String trans(String s, int n) {
// write code here
if(n==0) return s;
StringBuffer res = new StringBuffer();
//第一遍 把大小写转换
for(int i=0;i<n;i++){
if(s.charAt(i)<='z'&&s.charAt(i)>='a')
res.append((char) (s.charAt(i)-'a'+'A'));
else if(s.charAt(i)<='Z'&&s.charAt(i)>='A')
res.append((char) (s.charAt(i)+'a'-'A'));
else if(s.charAt(i)==' ')
res.append(' ');
}
//全部反转
res.reverse();
//以空格为分割反转
for(int i=0;i<n;i++){
int j=i;
while(j<n&&res.charAt(j)!=' ') j++;
StringBuffer tmp = new StringBuffer(res.substring(i,j));
tmp.reverse();
res.replace(i,j,tmp.toString());
i=j;
}
return res.toString();
}
}
84 最长公共前缀
import java.util.*;
public class Solution {
/**
*
* @param strs string字符串一维数组
* @return string字符串
*/
public String longestCommonPrefix (String[] strs) {
// write code here
if(strs.length==0) return "";
StringBuffer res = new StringBuffer();
for(int i=0;i<strs[0].length();i++){
char s = strs[0].charAt(i);
for(int j=0;j<strs.length;j++){
if(i>=strs[j].length()||s!=strs[j].charAt(i)) return res.toString();
}
res.append(s);
}
return res.toString();
}
}
85 验证IP地址![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e17c2178dbcfb7bd21ae6b3ac721ba44.png)
import java.util.*;
public class Solution {
/**
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
public String solve (String IP) {
// write code here
if(ipv4(IP)) return "IPv4";
else if(ipv6(IP)) return "IPv6";
return "Neither";
}
public boolean ipv4(String IP){
if(IP.indexOf('.')==-1) return false;
String[] strs = IP.split("\\.",-1);
if(strs.length!=4) return false;
for(int i=0;i<strs.length;i++){
if(strs[i].length()<1) return false;
for(int j=0;j<strs[i].length();j++){
if(strs[i].charAt(j)<'0'||strs[i].charAt(j)>'9') return false;
//以0开头
if(strs[i].length()!=1&&strs[i].charAt(0)=='0') return false;
}
int num = Integer.parseInt(strs[i]);
if(num>255||num<0) return false;
}
return true;
}
public boolean ipv6(String IP){
if(IP.indexOf(':')==-1) return false;
String[] strs = IP.split("\\:",-1);
if(strs.length!=8) return false;
for(int i=0;i<strs.length;i++){
//每位的长度不超过4
if(strs[i].length()>4||strs[i].length()<1) return false;
for(int j=0;j<strs[i].length();j++){
char c = strs[i].charAt(j);
if(!(c>='0'&&c<='9')&&!(c>='a'&&c<='f')&&!(c>='A'&&c<='F')) return false;
}
}
return true;
}
}
字符串函数:
IP.indexOf(‘:’)==-1 返回第一次出现的Index,不存在则返回-1
String[] strs = IP.split(“\\.”,-1);以.为分割必须加两个\,-1表示最后为空也计算空字符串,下面的:可以不加两个\
86 大数加法
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
StringBuffer res = new StringBuffer();
int jin=0;//进位
for(int i=s.length()-1,j=t.length()-1;i>=0||j>=0;i--,j--){
int n1 = i>=0?s.charAt(i)-'0':0;
int n2 = j>=0?t.charAt(j)-'0':0;
int num = (jin+n1+n2)%10;
jin = (jin+n1+n2)/10;
res.append(num);
}
//最后一个进位
if(jin>0) res.append(jin);
return res.reverse().toString();
}
}
我写的比官方题解简洁多了