寻找字符串中联系数字(全部都是1位数)之和为k的子串,如字符串"20210521"中和为6的子串为"105"。
1.Java实现
package com.test;
public class SubString1 {
public static void main(String[] args) {
String str = "20210521";
int k = 6;
String res = new SubString1().splitStr(str, k);
System.out.println(res);
}
public String splitStr(String str, int k) {
//标识符,找到,直接结束
boolean flag = false;
//保存结果
String result = "";
//转换成数组
int[] array = convertStrArray(str);
for(int i = 0; i < array.length - 1; i++) {
//里面循环结束,将total置为0
int total = 0;
//里面循环结束,将result结果清空,用于保存下一次循环的结果
result = "";
//累加
total += array[i];
//字符串结果集拼接
result += array[i];
for(int j = i + 1; j < array.length; j++) {
total += array[j];
result += array[j];
//是否找到
if(total == k) {
//找到,将flag置为true,并结束循环
flag = true;
break;
}
}
//找到,结束外层循环
if(flag){
break;
}
}
return result;
}
public int[] convertStrArray(String str){
//先把字符串转成数组
String[] split = str.split("");
int index = 0;
//将字符串中的元素全部放到int类型的数组中,进行后期的运算操作
int[] array = new int[split.length];
for(int i = 0; i < split.length; i++) {
array[index] = Integer.parseInt(split[i]);
index++;
}
return array;
}
}
2.python实现
s = input("请输入数字字符串");
i = 0; j = 0; k = 6; sum = 0;
while j < len(s):
ch1 = s[j];
sum = sum + int(ch1)
while sum > k:
ch2 = s[i]
sum = sum - int(ch2)
i = i + 1
if sum == k:
print("字串为:", s[i:j + 1])
break;
j += 1
else:
print("没有满足要求的子串")