目录
题目一:
题目二:
题目三:
题目四:
题目五:
题目六:
题目七:
题目一:
387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
public int firstUniqChar(String s) {
int[] array = new int[26];
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
array[ch - 'a']++;
}
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (array[ch - 'a'] == 1) {
return i;
}
}
return -1;
}
题目二:
字符串最后一个单词的长度_牛客题霸_牛客网 (nowcoder.com)
本题已经说了,单词之间有空格隔开,且依据通过的代码来看,并不存在单词之间有多个空格。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNextLine()) {
String str = scan.nextLine();
//方法一:使用split以空格分隔
// String[] tmp = str.split(" ");
// int index = tmp[tmp.length - 1].length();
// System.out.println(index);
//方法二:使用lastIndexOf找到第一个空格所在的下标index,
//然后用substirng截取从s中下标为index - 1至最后的字符串
int index = str.lastIndexOf(' ');
String lastString = str.substring(index + 1);
System.out.println(lastString.length());
}
}
题目三:
125. 验证回文串 - 力扣(LeetCode)
public boolean isPalindrome(String s) {
//将字符串中所有的大写字母转为小写字母
String str = s.toLowerCase();
int left = 0;
int right = str.length() - 1;
while (left < right) {
while (!isCharacterNumber(str.charAt(left)) && left < right) {
left++;
}
while (!isCharacterNumber(str.charAt(right)) && left < right) {
right--;
}
if (str.charAt(left) == str.charAt(right)) {//别忘了相等时要更新下标
left++;
right--;
} else {
return false;
}
}
return true;
}
//判断是否为字母数组字符
//判断某字符是否为字母,isLetter,判断某字符是否为数字,isDigit
public static boolean isCharacterNumber(char ch) {
if (Character.isDigit(ch) || Character.isLetter(ch)) {
return true;
} else {
return false;
}
}
题目四:
709. 转换成小写字母 - 力扣(LeetCode)
public String toLowerCase(String s) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch += 32;
}
stringBuilder.append(ch);
}
return stringBuilder.toString();
}
题目五:
434. 字符串中的单词数 - 力扣(LeetCode)
通过测试代码可以发现当输入的字符串时“”空字符串,要返回0,而不能是1。
题目有描述说,能够成为统计的个数之一,必须是连续的不是空格的字符(那我们以空格作为分割的标记就好了,split方法中分割的标记并不会记录到返回的数组中,但我们会发现当有连续的空格时,分割出来的数组中会有“多余的”,"",我们不能把它们算在最后的结果里面)。
【补充说明split方法是如何分割的】:它是每找到一次分割的记号就分割一次,例如:
s ieo isl,第一次分割的结果为s,ieo isl,第二次分割的结果为"",ieo isl,第三次分割的结果为ieo, isl,第四次分割的结果为“”, isl,第五次分割的结果为“”,isl,最后分割的结果为:s,"",ieo,"","",isl
public int countSegments(String s) {
if (s.length() == 0) {
return 0;
}
String[] str = s.split(" ");
int count = 0;
for (String tmp : str) {
if (!tmp.isEmpty()) {
count++;
}
}
return count;
}
题目六:
字符集合_牛客题霸_牛客网 (nowcoder.com)
每次拿到ch后看cur字符串中是否有这个字符,没有就拼接上。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String s = in.nextLine();
StringBuilder StringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
String str = ch + "";
if (StringBuilder.indexOf(str) == -1) {
StringBuilder.append(str);
}
}
String end = StringBuilder.toString();
System.out.println(end);
}
}
题目七:
合并两个有序的数组__牛客网 (nowcoder.com)
public static int[] func7(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 (j >= 0) {
A[k] = B[j];
j--;
k--;
}
while (i >= 0) {
A[k] = A[i];
i--;
k--;
}
return A;
}