一、题目表述
描述:
该程序接受一个字符串作为输入,并找出字符串中最大正整数的起始位置。如果字符串中不包含任何正整数,则返回位置0。正整数由连续的数字字符组成,并且不考虑正负号。程序应遍历字符串中的每个字符,当遇到数字字符时,将其组合成一个整数,并更新最大整数及其位置。最后,程序应返回最大正整数的起始位置。
示例1:
输入:
"hello123world"
输出:
5
示例2:
输入:
"nopositivenumbers"
输出:
0
二、题解
1、分析
核心思想:在给定的字符串中查找最大的正整数,并返回这个正整数在字符串中的起始位置。代码会遍历字符串中的每个字符,当遇到数字时,会尝试将连续的数字字符组合成一个整数,并与当前的最大整数进行比较。如果找到了更大的整数,则更新最大整数和对应的位置。
2、代码
public class Main {
// 方法:在字符串中查找最大的正整数并返回其起始位置
public static int findMaxPositiveIntegerPosition(String input) {
int maxInteger = 0; // 初始化最大正整数为0
int position = 0; // 初始化位置为0
// 遍历字符串中的每个字符
for (int i = 0; i < input.length(); i++) {
char currentChar = input.charAt(i);
// 如果当前字符是数字
if (Character.isDigit(currentChar)) {
int num = 0;
// 将连续的数字字符组合成一个整数
while (i < input.length() && Character.isDigit(input.charAt(i))) {
num = num * 10 + Character.getNumericValue(input.charAt(i));
i++;
}
// 如果当前整数大于之前的最大整数
if (num > maxInteger) {
maxInteger = num;
// 计算最大正整数的起始位置(注意:这里减去的是整数的字符串长度,而不是循环中的i增量)
position = i - String.valueOf(num).length();
}
}
}
// 返回最大正整数的起始位置
return position;
}
// 主方法:测试findMaxPositiveIntegerPosition方法
public static void main(String[] args) {
String input = "abc123xyz45def6789"; // 输入字符串
int position = findMaxPositiveIntegerPosition(input);
// 根据返回的位置值,输出相应的信息
if (position > 0) {
System.out.println("最大正整数的起始位置为: " + position);
} else {
System.out.println("输入中没有正整数,返回位置为: 0");
}
}
}
注:在position
的计算中,我们减去了整数的字符串长度,而不是在while
循环中递增的i
的值。这是因为while
循环中的i
是在不断递增的,而我们想要得到的是整数的起始位置,所以应该减去整数的字符串长度。