我正在尝试解决 Java 中字符串操作的编码问题。问题是
给定两个由数字和小写字母组成的字符串 S 和 T,您只能从任一字符串中删除一个数字,计算有多少种删除方式使 S 在字典上小于 T。
我自己想出了这个测试用例。如果 s = '3ab' 和 t = 'cd',返回 1。如果 s = '123ab' 和 t = '423cd',返回 6。
我的想法是使用 2 个 for 循环并通过检查字符是否为数字来遍历每个字符串,将其删除并与另一个字符串进行比较。
private static int numSmaller(String s, String t){
int ways = 0;
for(int i = 0; i < s.length(); i++){
StringBuilder sbs = new StringBuilder(s);
if(Character.isDigit(s.charAt(i))){
sbs.deleteCharAt(i);
String sub = sbs.toString();
if(sub.compareTo(t) < 0) {
ways++;
}
}
}
for(int i = 0; i < t.length(); i++){
StringBuilder sbt = new StringBuilder(t);
if(Character.isDigit(t.charAt(i))){
sbt.deleteCharAt(i);
String sub = sbt.toString();
if(s.compareTo(sub) < 0){
ways++;
}
}
}
return ways;
}
正如你所看到的,空间复杂度非常糟糕,而且代码也显得多余。有没有办法优化这段代码?有没有人看到不使用字符串生成器或每次都创建新字符串的方法?任何输入表示赞赏!