题目描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1
输入
abcd12345ed125ss123456789
输出
123456789
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String str = cin.nextLine();
char[] arr = str.toCharArray();
int begin = 0, end = begin + 1;
//记住下标
int start=begin,fin=end;
int max = 0, dis = 0;
while (end < arr.length && begin < end) {
int i = begin;
while (((int) arr[end] - (int) arr[i] == 1)&&(i<arr.length-1)&&(end<arr.length)) {
end++;
i++;
//末尾可能溢出
if(end==arr.length-1){
if((int) arr[end] - (int) arr[i] == 1){
end=arr.length;
break;
}
}
}
end=end-1;
dis = end - begin+1;
max = Math.max(dis, max);
//记住下标
if(max==dis){
start=begin;
fin=end;
}
begin = end+1;
end = begin + 1;
}
System.out.println(str.substring(start,fin+1));
}
}
注意while循环末尾容易溢出,需要做判断
优化之后的代码,不用再判断末尾。开始忘了记录连续子串开始的位置,用i记住。
简单题应该更快更好做完!
package suanfaA;
import java.util.*;
public class test {
public static void main(String[] args) {
lianxu();
}
public static void lianxu() {
Scanner scanner=new Scanner(System.in);
String test=scanner.nextLine();
char []arr=test.toCharArray();
int maxlength=Integer.MIN_VALUE;
int begin=0,end=begin+1;
int eindex=0;
while(end<arr.length&&begin<end){
//把begin起始的位置
int i=begin;
while(end<arr.length&&begin<arr.length&&arr[end]-arr[begin]==1){
begin++;
end++;
}
//记下最长的距离
maxlength=Math.max(maxlength, end-i);
//记下坐标
if(maxlength==end-i){
eindex=end;
}
begin=end;
end=end+1;
}
System.out.println(test.substring(eindex-maxlength, eindex));
}
}
题目描述
找出n个数里最小的k个
输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n
不超过100。
输出描述:
输出n个整数里最小的k个数。升序输出
示例1
输入
3 9 6 8 -10 7 -11 19 30 12 23 5
输出
-11 -10 3 6 7
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String str = cin.nextLine().toString();
String b[] = str.split(" ");
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < b.length ; i++) {
list.add(Integer.parseInt(b[i]));
}
int num = list.get(list.size() - 1);
list.remove(list.get(list.size() - 1));
Collections.sort(list);
for (int i = 0; i < num; i++) {
System.out.print(list.get(i)+" ");
}
}
}
题目描述
输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
示例1
输入
3 9 3 2 5 6 7 3 2 3 3 3
输出
3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String []arrStr=str.split(" ");
int []arr=new int[arrStr.length];
for(int i=0;i<arrStr.length;i++){
arr[i]=Integer.parseInt(arrStr[i]);
}
int []count=new int[100];
for(int i=0;i<arr.length;i++){
count[arr[i]]++;
}
int pos=0;
for(int i=0;i<count.length;i++){
if(count[i]>=arr.length>>1){
pos=i;
break;
}
}
System.out.println(pos);
}
}
题目描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1
输入
I like beijing.
输出
beijing. like I
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//倒置字符串
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String[]arr=str.split(" ");
String temp="";
for(int i=0;i<arr.length/2;i++){
temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
for(int i=0;i<arr.length-1;i++){
System.out.print(arr[i]+" ");
}
System.out.print(arr[arr.length-1]);
}
}
题目描述
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
输入描述:
每个测试输入包含2个字符串
输出描述:
输出删除后的字符串
示例1
输入
They are students. aeiou
输出
Thy r stdnts.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String str=sc.nextLine();
String delete=sc.nextLine();
char []array=delete.toCharArray();
for(int i=0;i<array.length;i++){
str=str.replaceAll(String.valueOf(array[i]), "");
}
System.out.println(str);
}
}
}
回溯法!!时隔三个月自己搞明白,重点重点!!!
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
输入描述:
每个测试输入包含2个整数,n和m
输出描述:
按每个组合的字典序排列输出,每行输出一种组合
示例1
输入
5 5
输出
1 4
2 3
5
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
static ArrayList<Integer> list = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int N = sc.nextInt();
int M = sc.nextInt();
// 从数列1,2,3.......n 中随意取几个数,使其和等于 m
dfs(1, M, N);
for (ArrayList<Integer> l : res) {
int i = 0;
for (; i < l.size() - 1; i++) {
System.out.print(l.get(i) + " ");
}
System.out.println(l.get(i));
}
}
}
public static void dfs(int index, int count, int n) {
if (count == 0) {
res.add(new ArrayList<>(list));
} else {
for (int i = index; i <= count && i <= n; i++) {
list.add(i);
dfs(i + 1, count - i, n);
list.remove(list.size() - 1);
}
}
}
}