最少前缀操作问题 题目:小U和小R有两个字符串,分别是 S S和 T T,现在小U需要通过对 S S进行若干次操作,使其变成 T T的一个前缀。操作可以是修改 S S的某一个字符,或者删除 S S末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让 S S变成 T T的前缀。
问题分析: 前缀匹配:首先,我们需要找到 S 和 T 的最长公共前缀。这个前缀部分不需要任何操作。 计算操作次数: 如果 S 的长度大于 T 的长度,那么我们需要删除 S 中多余的部分,直到 S 的长度等于 T 的长度。如果 S 的长度小于 T 的长度,那么我们需要修改 S 中与 T 不匹配的字符,直到 S 变成 T 的前缀。 先初始化操作的次数,然后while循环,i要小于S和T的长度才能循环,如果i所在S和T位置的字符不相同就要开始改变,于是操作次数就要增加,就这样循环完成,退出循环,如果S的长度更长,就用S的长度减去i这样就得到了后面需要删除的次数,将修改的次数和删除的次数相加就可以得到最终需要得到的次数
数字字符串格式化 replaceFirst 方法 replaceFirst 是 Java 中 String 类的一个方法,用于替换字符串中第一个匹配指定正则表达式的子字符串。 正则表达式 ^0+(?!):这是一个负向前瞻(negative lookahead),表示后面不能是字符串的结尾。也就是说,它确保不会匹配仅包含零的字符串。 String[] parts = s.split("\.");分离小数部分 \.:这是一个正则表达式,用于匹配小数点字符。由于小数点在正则表达式中有特殊含义(表示任意字符),所以需要使用双反斜杠进行转义。 将分离出来的字符串存入parts parts[0]=整数部分 parts[1]=小数部分 StringBuilder formattedInteger = new StringBuilder();创建String Builder对象 StringBuilder 是 Java 中的一个类,用于创建可变的字符串。与 String 类不同,StringBuilder 对象可以直接修改,而不需要创建新的对象。这使得 StringBuilder 在需要频繁修改字符串的场景下更高效。 append 方法:StringBuilder 类的一个方法,用于将指定的字符或字符串添加到当前 StringBuilder 对象的末尾。 因为循环的时候是倒着循环的(数字是倒着三个一组)所以最后还需要反转字符串,用的是 formattedInteger.reverse(); 最后将String Builder变成字符串输出后面再加上小数部分