目录
题目一:
题目二:
题目三:
题目四:
题目五:
题目六:
题目七:
题目一:
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 处理多个 caseString 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;
}