> 文章列表 > day20—编程题

day20—编程题

day20—编程题

文章目录

  • 1.第一题
    • 1.1题目
    • 1.2思路
    • 1.3解题
  • 2.第二题
    • 2.1题目
    • 2.2思路
    • 2.3解题

1.第一题

1.1题目

描述:
接受一个只包含小写字母字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
输入描述:
输入一行,为一个只包含小写字母的字符串。
输出描述:
输出该字符串反转后的字符串。

1.2思路

设置首尾两个位置start,end,每次交换首尾字符,然后start++, end–,直到start,end相遇

1.3解题

import java.util.*;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();char[] ch = str.toCharArray();int start = 0;int end = ch.length - 1;while (start < end) {char tmp = ch[start];ch[start] = ch[end];ch[end] = tmp;start++;end--;}System.out.println(ch);}
}

2.第二题

2.1题目

描述:
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串
输入描述:
输入两个只包含小写字母的字符串
输出描述:
输出一个整数,代表最大公共子串的长度

2.2思路

  1. 本题使用的是动态规划来解
  2. 定义一个二维数组统计当前最长字符串的长度
  3. 如果第i个字符和第j个字符相等,就进行累加

2.3解题

import java.util.*;
import java.io.*;
public class Main {public static int maxLen(String str1, String str2) {char[] ch1 = str1.toCharArray();char[] ch2 = str2.toCharArray();int[][] array = new int[ch1.length + 1][ch2.length + 1];int maxLen = 0;for (int i = 1; i <= ch1.length; i++) {for (int j = 1; j <= ch2.length; j++) {if (ch1[i - 1] == ch2[j - 1]) {array[i][j] = array[i - 1][j - 1] + 1;if (array[i][j] > maxLen) {maxLen = array[i][j];}}}}return maxLen;}public static void main(String[] args) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str1 = br.readLine();String str2 = br.readLine();System.out.println(maxLen(str1, str2));}
}