LeetCode 字符串相关题目 使用String相关方法解题

文章目录

  • 第一题 : [二进制求和](https://leetcode-cn.com/problems/add-binary/)
    • 解题思路:
    • 画图解析:
    • 代码实现:
  • 第二题 : [连续字符](https://leetcode-cn.com/problems/consecutive-characters/)
    • 解题思路:
    • 画图解析:
    • 代码实现:
  • 第三题 : [翻转字符串里的单词](https://leetcode-cn.com/problems/reverse-words-in-a-string/)
    • 解题思路:
    • 画图解析:
    • 代码实现:

第一题 : 二进制求和

LeetCode 67:
描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
LeetCode 字符串相关题目 使用String相关方法解题_第1张图片

解题思路:

1.字符串表示的数字,遍历字符串,从后往前加.遍历次数为两个字符串中最长的次数.
2.用ret来判断是否要进位,从最后开始加,把字符串单个字符转化成int类型,相加.加起来的值判断 >=2 就进位.
3.最后遍历完,如果 ret还等于1,则还需要进位一次.
4.用 StringBuilder 或者 StringBuffer 把求得的数字连接起来.
5.因为从后往前求,还需要逆置字符串.

画图解析:

LeetCode 字符串相关题目 使用String相关方法解题_第2张图片

代码实现:

class Solution {
     
    public String addBinary(String a, String b) {
     
        StringBuilder sb = new StringBuilder();
        int n1 = a.length();
        int n2 = b.length();
        int max = n1 > n2 ? n1 : n2;
        int ret = 0;
        while(max-- != 0){
     
            int a1 = --n1 >= 0 ? a.charAt(n1) - '0' : 0;
            int b1 = --n2 >= 0 ? b.charAt(n2) - '0' : 0;
            sb.append((a1+b1+ret)%2);
            ret = (a1+b1+ret) >= 2 ? 1 : 0;
        }
        if(ret==1){
      sb.append(ret);}
        sb.reverse();
        return sb.toString();
    }
}

第二题 : 连续字符

LeetCode 1446:
描述: 给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。
请你返回字符串的能量。
LeetCode 字符串相关题目 使用String相关方法解题_第3张图片

解题思路:

1. 遍历字符串,如果两个字符相等就加1,用count存放.
2. 可能存在多个相等的地方,如字符串 “leeeetcooooood”
3. 遍历,当 s[i] = s[i-1] 时,count++,当s[i] != s[i-1] 时,count = 1;
4. 记录下count的最大值maxcount
5. 遍历结束返回maxcount

画图解析:

LeetCode 字符串相关题目 使用String相关方法解题_第4张图片

代码实现:

class Solution {
     
    public int maxPower(String s) {
     
        int n = s.length();
        int maxcount = 1;
        int count = 1;
        for(int i = 1 ; i < n;i++){
     
            char ch = s.charAt(i);
            char ch1 = s.charAt(i-1);
            if(ch == ch1){
     
                count++;
                maxcount = Math.max(maxcount,count);
            }else{
     
                count = 1;
            }
            
        }
        return maxcount;
    }
}

第三题 : 翻转字符串里的单词

LeetCode 151:
描述:
给你一个字符串 s ,逐个翻转字符串中的所有 单词 。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。

说明:

  • 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
  • 翻转后单词间应当仅用一个空格分隔。
  • 翻转后的字符串中不应包含额外的空格。

LeetCode 字符串相关题目 使用String相关方法解题_第5张图片

解题思路:

1. 使用 split 拆分字符串 :
        split方法的参数:
          ① \\s 表示 空格,回车,换行等空白符
          ② +号 表示 一个或多个的意思
2. 遍历使用StringBuilder的append链接起来带上一个空格 " " ;
3. 使用 trim() 把右边多余的空格去掉

画图解析:

LeetCode 字符串相关题目 使用String相关方法解题_第6张图片

代码实现:

class Solution {
     
    public String reverseWords(String s) {
     
    	// 这里的\\s+ 表示按空白部分进行拆分
        String[] str = s.split("\\s+");
        StringBuilder sb = new StringBuilder();
        for(int i = str.length - 1; i >= 0 ;i--){
     
            sb.append(str[i]+" ");
        }
        return sb.toString().trim();
    }
}

你可能感兴趣的:(LeetCode,java,字符串,leetcode)