目录
1.字符串中的第一个唯一字符
2. 最后一个单词的长度
58. 最后一个单词的长度
3.验证回文串
4.字符串相加
5.小结:
1.字符串中的第一个唯一字符387. 字符串中的第一个唯一字符https://leetcode.cn/problems/first-unique-character-in-a-string/
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1: 输入: s = "leetcode" 输出: 0
同源练习:剑指 Offer 50. 第一个只出现一次的字符
class Solution {
public int firstUniqChar(String s) {
char[] cs = s.toCharArray();
char[] count = new char[128];
for(int i = 0 ; i < cs.length; i++){
count[cs[i]]++;
}
for(int i = 0; i < s.length(); i++){
if(count[cs[i]] == 1){
return i;
}
}
return -1;
}
}
目前这个题只有这一种思路,以后会学到hashmap🤩
2. 最后一个单词的长度
58. 最后一个单词的长度https://leetcode.cn/problems/length-of-last-word/
给你一个字符串
s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
class Solution {
public int lengthOfLastWord(String s) {
s = s.trim();//因为他有个测试用例两边是空格
return s.length() - s.lastIndexOf(" ") - 1;
}
// public int lengthOfLastWord(String s) {
// String str = s.trim();
// for (int i = str.length() - 1; i > 0; i--) {
// if (str.charAt(i) == ' ') {
// return str.length() - i - 1;
// }
// }
// return str.length();
// }
}
3.验证回文串
125. 验证回文串https://leetcode.cn/problems/valid-palindrome/
class Solution {
public static boolean isValidChar(char ch){
if((ch >= 'a' && ch <= 'z') ||(ch >= '0' && ch <= '9')){
return true;
}
return false;
}
public boolean isPalindrome(String s) {
// 将大小写统一起来
s = s.toLowerCase();
int left = 0, right = s.length()-1;
while(left < right){
// 1. 从左侧找到一个有效的字符
while(left < right && !isValidChar(s.charAt(left))){
left++;
}
// 2. 从右侧找一个有效的字符
while(left < right && !isValidChar(s.charAt(right))){
right--;
}
if(s.charAt(left) != s.charAt(right)){
return false;
}else{
left++;
right--;
}
}
return true;
}
}
4.字符串相加
415. 字符串相加https://leetcode.cn/problems/add-strings/
给定两个字符串形式的非负整数
num1
和num2
,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如
BigInteger
), 也不能直接将输入的字符串转换为整数形式。示例 1:
输入:num1 = "11", num2 = "123" 输出:"134"
- 采用双指针,倒叙遍历,ret存每一位的值,carry来存储是否进位;
- 由于最后结果是倒叙,所以最后将他翻转;
- 举个例子自己模拟一遍。
1.String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
- String变为StringBuilder: 利用StringBuilder的构造方法或append()方法;
- StringBuilder变为String: 调用toString()方法;
2.StringBuff append(String str)在尾部追加,相当于String 的 += ,可以追加: boolean 、 char 、 char[]、 double、float 、 int 、 long 、 Object 、 String 、 StringBuff4二的人非常v提供必要黑奴解密卡,o.l/;p['|z的变量
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder ret=new StringBuilder("");//如果用string+""会开辟一块新的空间?
int i=num1.length()-1;
int j=num2.length()-1;
int carry=0;
while(i>=0||j>=0){
int n1=i>=0?num1.charAt(i)-'0':0;
int n2=j>=0?num2.charAt(j)-'0':0;//字符减去字符是数字
int temp=n1+n2+carry;
carry=temp/10;
ret.append(temp%10);
i--;
j--;
}
if(carry==1)
ret.append("1");
return ret.reverse().toString();
}
}
5.小结:
(1)数组为空,与数组长度为0,是两个不同的概念。我本来以为一样
String[] s0 = {};
s0不为空,但它指向空值,长度为0,系统开辟了内存,但内存中没有放任何东西,所以其长度为0,但数组不为空(已经开辟内存了),值却是空值。
String[] s1 = {null};
s1不为空,长度为1,开辟内存的同时,将1个null放入内存中,所以长度为1,值为null。
所以就是说,数组为空的话,长度为0,数组为null,长度为1。如果只判断长度为0,就会漏掉为null的情况。(2)字符串转整形数字这题暂时不会,看还没看懂,等过段时间再看吧。
(3)感觉常用的“库函数”还是得记住一点。