感谢您的阅读!

꒰˃͈꒵˂͈꒱ write in front꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ原创 CSDN如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
系列专栏:xiaoxie的刷题系列专栏——CSDN博客●’ᴗ’σσணღ*
我的目标:”团团等我( ◡̀_◡́ ҂)”

(⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞 + 收藏⭐️ + 留言​+关注(互三必回)!

一.把字符串转换成整数

1.首先我们看到这一题我们可以注意到字符串的数据范围为0<= n <=100 所以我们要先考虑好边界问题

 如果字符串为空,或者是字符串的长度为0 我们就return 0if (str == null || str.length() == 0) {return 0;}

2.现在我们来到第二步,可以看出题目的意思为除了+ – 以外的符号时直接输出0,出现了判断的问题,所以我们要把字符串给转换成char 数组的形式这样子转换成数组的形式更好对字符串的元素进行操作

//使用库函数把字符串转换成数组的形式char[] ch = str.toCharArray();

3.我们现在来到第三步可以看到题目的注意:字符串中可能出现 +/- 且仅可能出现在字符串首位

我们就可以先对字符串数组的第一个元素也就是char[0]判断一下是否为 +

int a = 1;//如果数组的第一个元素判断为符号 - 就赋值为 -1 int b = 0;//如果数组的第一个元素判断为符号 +/- 就加一 数组就从下标为1的时候开始判断if (ch[0] == '+') {b = 1;}else if (ch[0] == '-') {b = 1;a = -1;}

4.我们使用for循环来判断数组的元素是否为非数字

 int result = 0;for (int i = b; i < ch.length; i++) {// 判断当前字符是否为数字,如果不是,则返回0 if (!Character.isDigit(ch[i])) {return 0;}int digit = ch[i] - '0';// 通过将字符减去字符'0'得到对应的数字result =result*10 + digit;// 将当前数字添加到结果中,乘以10表示将当前数字放在个位上 }return a * result;}

总体的代码

import java.util.*;public class Solution {public int StrToInt(String str) {if (str == null || str.length() == 0) {return 0;}char[] ch = str.toCharArray();int a = 1;int b = 0;if (ch[0] == '+') {b = 1;}else if (ch[0] == '-') {b = 1;a = -1;}int result = 0;for (int i = b; i < ch.length; i++) {if (!Character.isDigit(ch[i])) {return 0;}int digit = ch[i] - '0';result =result*10 + digit;}return a * result;}}

二..字符串相加

首先我们可以从下图看到例如字符串“12345” 和“12”是如何相加的

我们可以看出两个字符串相加是从num1的最后一个元素和num2的最后一个元素开始相加的,那么我们就有这样一个思路,先把两个字符串转换成数组的形式,然后让它们的最后一个元素开始相加,在设一个参数carry,如果相加大于9,Carry就加一否则就为0,然后使StringBuilder.append(),把数组元素添加进行添加,需要注意的是因为是从尾部开始添加,所以我们还需要逆置,以上就这个题总体思路了现在我们进行分步讲解

1.根据上文已知的思路,我们要从尾部开始,那我们是不是需要获取到它们尾部的下标,以及我们还需要创建一个参数来表示两数相加后的进位carry 所以可以得出以下代码:

int i = num1.length()-1;int j = num2.length()-1;int carry = 0;//进位

2.因为需要用到StringBuilder.append(),和StringBuilder.reverse()方法所以我们需创建StringBuilder对象

StringBuilder s = new StringBuilder();

3.因为需要转换成数组的形式所以有以下代码

char[] ch1 = num1.toCharArray();char[] ch2 = num2.toCharArray();

4.好前期的一些参数准备我们都设立好了,现在让我们开始解决本题的关键步骤,让两个数组的尾部元素相加,直到进位数为0,或者其中一位数组的元素加完了。结合上文思路可以得出以下代码,(如果看不懂这段代码博主建议自己画一下两数相加的图,然后结合博主的思路以及下文代码的注释,多看几遍,相信聪明的你肯定可以解决):

//这里加个carry != 0 的条件是为了确保两个数组的所有个数字的所有位都已经相加完毕,但如果还有进位的话,也要继续将进位加到结果中。while(i >= 0 || j>= 0 || carry!= 0) {int x = ch1[i] class Solution {public String addStrings(String num1, String num2) {int i = num1.length()-1;int j = num2.length()-1;int carry = 0;StringBuilder s = new StringBuilder();char[] ch1 = num1.toCharArray();char[] ch2 = num2.toCharArray();while(i >= 0 || j >= 0 || carry != 0) {int x = i < 0 ? 0 : ch1[i--] - '0';int y = j < 0 ? 0 : ch2[j--] - '0';int sum = x+y+carry;s.append(sum % 10);carry = sum / 10;}return s.reverse().toString();}}

这个方法的执行用时,及内存分布

二.1字符串相加扩展:

博主做完这道题,又自己给自己做了一个假设,如果两个数可以为负数该如何解呢

class Solution {public String addStrings(String num1, String num2) {// 去掉负号boolean isNegative1 = num1.charAt(0) == '-';boolean isNegative2 = num2.charAt(0) == '-';num1 = isNegative1 " />

如果你有更好的解法也可以私信博主哦,大家一起讨论

三.验证回文串

还是和前面几题一样我们先确定自己的总体思路:首先比较字符串是否回文,我们了可以设定头部元素和尾部元素,进行动态移动然后比较是否相等,因为要忽视非字母数字字符,我们可以用到Character.isisLetterOrDigit 方法这样使用while循环直到头部指针等于尾部指针,就证明字符串回文了,以上就是本体的总体思路了,现在博主为大家分布讲解

1.根据上文已知的思路,我们需要取得头部部分和尾部部分

 int start = 0; int end = s.length()-1;

2.根据上文思路我们需要写一个while循环,动态移动头部和尾部

 while(start < end){char chS = s.charAt(start);char chE = s.charAt(end);//头部指针指向的元素不为字母或者是数字就往后移动if(!Character.isLetterOrDigit(chS)){start++;}//尾部指针指向的元素不为字母或者是数字就往前移动else if(!Character.isLetterOrDigit(chE)){end--;}//先把字母转换成小写后比较如果不相等就返回falseelse if(Character.toLowerCase(chS)!=Character.toLowerCase(chE)){return false;}//如果相等就动态移动else{start++;end--;} }//如果头部指针等于尾部指针就说明这个字符串以及遍历完成了,形成回文 返回truereturn true;

3.总体代码

class Solution {public boolean isPalindrome(String s) {int start = 0;int end = s.length()-1;while(start < end){char chS = s.charAt(start);char chE = s.charAt(end);if(!Character.isLetterOrDigit(chS)){start++;}else if(!Character.isLetterOrDigit(chE)){end--;}else if(Character.toLowerCase(chS)!=Character.toLowerCase(chE)){return false;}else{start++;end--;}}return true;}}

这个方法的执行用时,及内存分布

四.说明

以上就是博主关于String 的刷题了,用于博主也才刚开始学习Java,所以可能有些地方的解法不是最优解,还有很大的进步空间,希望看完之后可以对你可以有一点小启发,当然如果你有更好的解法或者是有什么不太明白的地方也可以私信博主,博主很期待和你一起加油一起成长。