测试面试题5

1.最长回文字串

package mathtest;
/*
* 最长回文字串
* 输入: "babad"输出: "bab"
* */
public class LongStringTest {
    public static void main(String[] args) {
        String str="cbbd";
        String result=longestString(str);
        System.out.println(result);
    }
    //暴力解法
    public static String longestString(String str){
        String longString="";
        for(int i=0;i<str.length();i++ ){
            for(int j=i+1;j<str.length();j++){
                String string = str.substring(i,j+1);
                if(new StringBuilder(string).reverse().toString().equals(string)){
                    longString=longString.length()>string.length()?longString:string;
                }
            }

        }
        return longString;
    }
   // 动态规划
   public String longestPalindrome(String s) {
        if (s.isEmpty()) {
            return s;
        }
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        int left = 0;
        int right = 0;
        for (int i = n - 2; i >= 0; i--) {
            dp[i][i] = true;
            for (int j = i + 1; j < n; j++) {
                dp[i][j] = s.charAt(i) == s.charAt(j) &&( j-i<3||dp[i+1][j-1]);//小于3是因为aba一定是回文
                if(dp[i][j]&&right-left<j-i){
                    left=i;
                    right=j;
                }
            }
        }
        return s.substring(left,right+1);
    }
}

2.整数反转

package mathtest;

import java.util.Scanner;

/*
* 整数反转
* */
public class ReverseTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        System.out.println(reverseNumber(number));

    }
    public static int reverseNumber(int num){
        StringBuilder sb = new StringBuilder();
        if(num < 0){
            sb.append("-");
        }
       String strr= new StringBuilder(String.valueOf(Math.abs(num))).reverse().toString().replaceFirst("^0*","");
        return Integer.parseInt(sb.append(strr).toString());
    }
}

3.罗马数字转汉字

package mathtest;

import java.util.HashMap;

/*
* 罗马数字转整数
* I, V, X, L,C,D 和 M
* */
public class ConvertTest {
    public static void main(String[] args) throws Exception {
        String str="LVIII";
        int result= covert(str);
        System.out.println(result);



    }
    public static int covert(String str) throws Exception {
        int result=0;
        HashMap<Character,Integer> map = new HashMap<>();
        map.put('I',1);
        map.put('V',5);
        map.put('X',10);
        map.put('L',50);
        map.put('C',100);
        map.put('D',500);
        map.put('M',1000);
        for(int i=0;i<str.length()-1;i++){
            if(map.containsKey(str.charAt(i))) {
                if (map.get(str.charAt(i)) < map.get(str.charAt(i + 1))) {
                    result -= map.get(str.charAt(i));
                } else {
                    result += map.get(str.charAt(i));
                }
            }else {
                throw new Exception("罗马数字非法");
            }
        }
        result += map.get(str.charAt(str.length()-1));
        return result;
    }

}

4.数组中三数字之和等于0

package mathtest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
* 数组中三数字之和等于0
* */
public class ThreeSumTest {
    public static void main(String[] args) {
        int[] nums={-1, 0, 1, 2, -1, -4};
        System.out.println(threeNumberSum(nums));
    }
    public static List<List<Integer>> threeNumberSum(int[] nums){
        Arrays.sort(nums);
        List<List<Integer>> list = new ArrayList<>();
        int len = nums.length;
        for(int i=0;i<nums.length-2;i++){
            for(int j=i+1,k=len-1;j<k;j++,k--){
                if(nums[i] + nums[j]+nums[k] ==0){
                    if(list.add(Arrays.asList(nums[i],nums[j],nums[k]))){
                        continue;
                    }
                }else if(nums[i] + nums[j]+nums[k]<0){
                    j++;
                }else {
                    k--;
                }
            }

        }
        return list;
    }
}


5.数组中三数字之和最接近target

package mathtest;

import java.util.*;

/*
*给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,
* 使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案
* */
public class SolutionTest1 {
    public static void main(String[] args) {
        int[] nums={-1, 0, 1, 2, -1, -4};
        System.out.println(threeNumberSum(nums,4));
    }
    public static List<List<Integer>> threeNumberSum(int[] nums,int target){
        Arrays.sort(nums);
        int sum = nums[0]+nums[1]+nums[2];
        int min = Math.abs(target-sum);
        List<List<Integer>> list = new ArrayList<>();
        int len = nums.length;
        for(int i=0;i<nums.length-2;i++){
            for(int j=i+1,k=len-1;j<k;j++,k--){
                int sum1=nums[i] + nums[j]+nums[k];
                int cha = sum1-target;
                if(cha ==0){
                    if(list.add(Arrays.asList(nums[i],nums[j],nums[k]))){
                        return list;
                    }
                }else if(cha<0){
                    if(Math.abs(cha)<min){
                        min=Math.abs(cha);
                        list.removeAll(list);
                        list.add(Arrays.asList(nums[i],nums[j],nums[k]));
                    }
                    j++;
                }else {
                    if(Math.abs(cha)<min){
                        min=Math.abs(cha);
                        list.removeAll(list);
                        list.add(Arrays.asList(nums[i],nums[j],nums[k]));
                    }
                    k--;
                }
            }

        }
        return list;
    }
}

package mathtest;

import java.util.*;

public class ThreeTest {
    public static void main(String[] args) {
        int[] nums={-1, 0, 1, 2, -1, -4};
        System.out.println(threeNumberSum(nums));
    }
    public static List<List<Integer>> threeNumberSum(int[] nums){
        Set<List<Integer>> set =new HashSet<>();
        if(nums.length<3|| nums==null){
            return new ArrayList<>(set);
        }
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++){
            int j=i+1;
            int k=nums.length-1;
            while (j<k){
                int sum= nums[i]+nums[j]+nums[k];
                if(sum==0){
                    set.add(Arrays.asList(nums[i],nums[j],nums[k]));
                    j++;
                    k--;
                }else if(sum>0){
                    k--;
                }else {
                    j++;
                }
            }

        }
        return new ArrayList<>(set);
    }
}

6.电话号码的字母组合

// A code block
var foo = 'bar';package mathtest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

/*
* 电话号码的字母组合
* */
public class letterCombinations {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入2-9组成的字符串");
        String str = sc.nextLine();
        System.out.println(letterString(str));

    }
    public static List<String> letterString(String string) throws Exception{
        HashMap<Character,String> map =  new HashMap<>();
        map.put('2', "abc");
        map.put('3', "def");
        map.put('4', "ghi");
        map.put('5', "jkl");
        map.put('6', "mno");
        map.put('7', "pqrs");
        map.put('8', "tuv");
        map.put('9', "wxyz");
        List<String> result = new ArrayList<>();
        result.add("");
        for(int i=0;i<string.length();i++){
            List<String> tmpList = new ArrayList<>();
            char c = string.charAt(i);
            if(!map.containsKey(c)){
                throw new Exception("字符串不是纯2-9的数字");
            }
            String key = map.get(c);
            for(String ss : result) {
                for (int j = 0; j < key.length(); j++) {
                    char cc = key.charAt(j);
                    String tmp=ss+cc;
                    tmpList.add(tmp);
                }
            }
            result=tmpList;
        }
        return result;
    }

}

8.数组中四数之和

package mathtest;

import java.util.*;

/*
* 给定一个包含 n 个整数的数组 nums 和一个目标值 target,
* 判断 nums 中是否存在四个元素 a, b,c 和 d ,
* 使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
*
* */
public class FourSumTest {
    public static void main(String[] args) {
      int[]  nums = {1, 0, -1, 0, -2, 2};
        System.out.println(fourSum(nums,0));
    }
    private static List<List<Integer>> fourSum(int[] nums,int target){
        Set<List<Integer>> result = new HashSet<>();
        if (nums == null || nums.length < 4) {
        return new ArrayList<>(result);
    }
        Arrays.sort(nums);
        int len = nums.length;
        for (int i = 0; i < len; i++) {
        for (int j = i + 1; j < len; j++) {
            int k = j + 1;
            int x = len - 1;
            while (k < x) {
                int sum = nums[i] + nums[j] + nums[k] + nums[x];
                if (sum == target) {
                    result.add(Arrays.asList(nums[i],nums[j],nums[k],nums[x]));
                    k++;
                    x--;
                } else if (sum > target) {
                    x--;
                } else {
                    k++;
                }
            }
        }
    }
        return new ArrayList<>(result);
}
}

9.服务器返回的常见HTTP状态码

在这里插入图片描述
2XX 成功
200 OK
204 No Content
表示请求已成功处理,但是没有内容返回
206 Partial Content
表示服务器已经完成了部分GET请求(客户端进行了范围请求)
响应报文中包含Content-Range指定范围的实体内容
3XX 重定向
301 Moved Permanently
永久重定向,表示请求的资源已经永久的搬到了其他位置
就是说资源已经被分配了新的URI
新的URI应该提示在响应报文的Location首部字段
只要不是HEAD请求,响应实体应该包含新URI的超链接和简短的说明
302 Found
临时重定向,表示请求的资源临时搬到了其他位置
请求的资源暂时被配到到了新的URI
303 See Other
表示请求资源存在另一个URI,应使用GET定向获取请求资源
303功能与302一样,区别只是303明确客户端应该使用GET访问
304 Not Modified
表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足
返回304时,不包含任何响应主体
虽然304被划分在3XX,但和重定向一毛钱关系都没有
307 Temporary Redirect
临时重定向,和302有着相同含义
尽管302标准禁止POST变为GET,但没人听他的
而307就会遵照标准,不会从POST变为GET
但处理响应行为,各个浏览器可能不同
4XX 客户端错误
400 Bad Request
表示请求报文存在语法错误或参数错误,服务器不理解
服务器不应该重复提交这个请求
需要修改请求内容后再次发送
401 Unauthorized
表示发送的请求需要有HTTP认证信息或者是认证失败了
返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部以质询用户信息
浏览器初次接受401时,会弹出认证窗口
403 Forbidden
表示对请求资源的访问被服务器拒绝了
服务器可以对此作出解释,也可以不解释
想说明的话可以在响应实体的主体部分描述原因
比如说你可能没有访问权限
404 Not Found
表示服务器找不到你请求的资源
也有可能服务器就是不想给你然后骗你找不到(⊙ˍ⊙)
而且大多服务器都是这么玩这个状态码的
5XX 服务器错误
500 Internal Server Error
表示服务器执行请求的时候出错了
可能是Web应用有bug或临时故障
更有可能是服务器源代码有bug…
503 Service Unavailable
表示服务器超负载或正停机维护,无法处理请求
如果服务器知道还需要多长时间,就写入Retry-After首部字段返回
总结
返回的状态码和状态不一致的情况是有可能发生得
比如Web应用程序内部错误,但仍然返回 200 OK

200 OK
请求正常处理完毕
204 No Content
请求成功处理,没有实体的主体返回
206 Partial Content
GET范围请求已成功处理
301 Moved Permanently
永久重定向,资源已永久分配新URI
302 Found
临时重定向,资源已临时分配新URI
303 See Other
临时重定向,期望使用GET定向获取
304 Not Modified
发送的附带条件请求未满足
307 Temporary Redirect
临时重定向,POST不会变成GET
400 Bad Request
请求报文语法错误或参数错误
401 Unauthorized
需要通过HTTP认证,或认证失败
403 Forbidden
请求资源被拒绝
404 Not Found
无法找到请求资源(服务器无理由拒绝)
500 Internal Server Error
服务器故障或Web应用故障
503 Service Unavailable
服务器超负载或停机维护

参考链接:https://blog.csdn.net/q1056843325/article/details/53147180

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值