434. 字符串中的单词数 AND 67. 二进制求和

121 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

434. 字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:

输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。

解题思路

当空格前面出现了非空格字符时,统计为1个单词。使用boolean类型表示前一个字符是否为空格

代码

class Solution {
    public int countSegments(String s) {
        int n=s.length(),cnt=0;
        boolean noSpace=false;
        for (int i = 0; i < n; i++) {

            if (s.charAt(i)==' ')
            {
                if (noSpace)
                {
                    noSpace=false;
                    cnt++;
                }
            }else {
                noSpace=true;
            }

        }
        return cnt+(noSpace?1:0);
    }
}

67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1" 输出: "100" 示例 2:

输入: a = "1010", b = "1011" 输出: "10101"

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

解题思路

十进制字符串相加的变形。逐位相加,保存进位参与下一位的计算中。

代码

class Solution {
    public String addBinary(String a, String b) {
        int n=a.length()-1,m=b.length()-1,c=0;
        StringBuilder sb=new StringBuilder();
        while(n>=0||m>=0)
        {
            int f=n>=0?a.charAt(n)-'0':0;
            int s=m>=0?b.charAt(m)-'0':0;
            int cur=(f+s+c)%2;
            sb.append(cur);
            c=(f+s+c)/2;
            n--;
            m--;
        }
        if(c==1)
        sb.append(c);
        return sb.reverse().toString();
        
    }
}