字符串——去掉字符串中连续出现k个0的子串

本文介绍了一种从字符串中移除恰好出现k次的连续'0'的方法,并提供了一个具体的Java实现示例。该算法使用StringBuilder来构建结果字符串,确保除了指定次数外的所有'0'都被保留。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

只去掉正好出现k个‘0’的子串。


举例:

  String s1="A00B";   k=2;   return  AB.
  String s2="A0000B000";  k=3; return A0000B.


借用StringBuilder。sb.append的时间在s.charAt(i)不是‘0’的时候,那么如果s以‘0’结尾,可能会出现最后一组连续的'0'的个数不是k而没有加上得情况,所以遍历完成后,再检查一下count是否等于k。

public String removeZeros(String s,int k)
{
	StringBuilder sb=new StringBuilder();
	int start=-1;
	int count=0;
	for(int i=0;i<s.length();i++)
	{
		if(s.charAt(i) == '0')
		{
			start=start == -1?i:start;
			count++;
		}else
		{
			if(count!=k)
			{
				while(count !=0)
				{
					sb.append('0');
					count--;
				}
			}
			sb.append(s.charAt(i));
			count=0;
			start=-1;
		}
	}
	if(count!=k)
	{
		while(count !=0)
		{
			sb.append('0');
			count--;
		}
	}
	return sb.toString();
	}


### 统计子串字符串中出现的次数 要统计一个子串在一个目标字符串中的出现次数,可以通过遍历目标字符串并逐一匹配子串来完成。以下是基于 C 和 Python 的两种实现方式。 #### 方法一:C 实现 以下是一个完整的 C 程序,用于计算子串在目标字符串中出现的次数: ```c #include<stdio.h> #include<string.h> int countSubstring(const char* str, const char* sub) { int count = 0; size_t lenSub = strlen(sub); if (lenSub == 0) return 0; for (size_t i = 0; str[i] != '\0'; ++i) { size_t j; for (j = 0; j < lenSub && (str[i + j] == sub[j]); ++j); // 匹配子串 if (j == lenSub) { // 如果完全匹配,则计数 count++; } } return count; } int main() { char str[100]; char sub[50]; printf("请输入目标字符串:\n"); fgets(str, sizeof(str), stdin); str[strcspn(str, "\n")] = '\0'; // 去除换行符 printf("请输入子串:\n"); fgets(sub, sizeof(sub), stdin); sub[strcspn(sub, "\n")] = '\0'; // 去除换行符 int result = countSubstring(str, sub); printf("子串 '%s' 在目标字符串中出现了 %d 次。\n", sub, result); return 0; } ``` 此代码实现了 `countSubstring` 函数,它接受两个参数——目标字符串子串,并返回子串在目标字符串中出现的次数[^1][^2]. --- #### 方法二:Python 实现 在 Python 中可以更简洁地实现这一功能,利用内置函数或手动编写逻辑均可。 ##### 使用内置方法 可以直接调用字符串对象的 `.count()` 方法: ```python def count_substring(s, sub): return s.count(sub) # 测试 target_string = input("请输入目标字符串: ") substring = input("请输入子串: ") result = count_substring(target_string, substring) print(f"子串 '{substring}' 在目标字符串中出现了 {result} 次。") ``` `.count()` 是一种高效的方法,适用于大多数场景[^4]. ##### 手动实现 如果不使用内置方法,也可以通过循环逐一遍历来实现: ```python def count_substring_manual(s, sub): count = start = 0 while True: start = s.find(sub, start) if start == -1: break count += 1 start += 1 # 移动到下一个位置继续查找 return count # 测试 target_string = input("请输入目标字符串: ") substring = input("请输入子串: ") result = count_substring_manual(target_string, substring) print(f"子串 '{substring}' 在目标字符串中出现了 {result} 次。") ``` 这种方法通过不断调用 `find()` 来定位子串的位置,并记录其出现次数[^3]. --- ### 性能分析 - **时间复杂度**: 对于长度为 \(m\) 的目标字符串和长度为 \(n\) 的子串,最坏情况下需要执行大约 \((m-n+1)\times n\) 次比较操作。 - **空间复杂度**: 上述算法均只占用常量额外空间,因此空间复杂度为 \(O(1)\). ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值