小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
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();
}
}