本篇我们再来学习两道oj题,一道字符串题,一道数组题,一起来体会ac后的快乐吧🐤🐤🐤
1. 字符集合
题目链接:https://www.nowcoder.com/questionTerminal/784efd40ed8e465a84821c8f3970b7b5
🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕
大致总结一下题意,该题让我们输出给定字符串中的字符,如果后面中该字符出现了第二次或多次,则不再输出这个字符。
字符串中只包含大小写字母,那么我们就可以考虑用hash的思想,即把字符的ascii码值当作数组的下标,字符出现一次,数组中该元素加+1;同时定义一个StringBuilder的变量,遇到一个第一次出现的字符就append追加一次,直到遍历完字符串后,把StringBuilder的变量再转为字符串进行输出。
注意:该题需要多组输入
代码如下:
import java.util.*;
public class Main {
public static String func(String str) {
int[] array = new int[58];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(array[ch-'A'] == 0) {
sb.append(ch);
array[ch-'A']++;
}
}
return sb.toString();
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()) {
String str = scan.nextLine();
String ret = func(str);
System.out.println(ret);
}
}
}
2. 合并两个有序的数组
题目链接:https://www.nowcoder.com/questionTerminal/89865d4375634fc484f3a24b7fe65665
🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪🥪
题目给定的代码如下:
提炼一下题意,这道题给定了两个数组A和B,其中的元素个数分别为m和n,这两个数组中的元素都是升序,要求我们把这两个数组合并后其依然是升序,注意该题后台会自动给A数组扩容,也就是数组中的元素个数实际为m+n,不需要我们手动扩容。总之该题的要求就是让我们把B数组合并到A数组中,使合并后的A数组依然是升序(注意不需要我们返回A数组,合并完即可)。
代码如下:
import java.util.*;
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int i = m - 1;
int j = n - 1;
int k = m + n -1;
while(i >= 0 && j >= 0) {
if(A[i] >= B[j]) {
A[k] = A[i];
i--;
k--;
} else {
A[k] = B[j];
j--;
k--;
}
}
while(i >= 0) {
A[k] = A[i];
i--;
k--;
}
while(j >= 0) {
A[k] = B[j];
j--;
k--;
}
}
}
|