我正在尝试解决 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 …
Run Code Online (Sandbox Code Playgroud) 下面的代码是我为一个问题写的答案,该问题要求将nxn 2D矩阵旋转90度(顺时针),而不创建新的2D数组.所以,例如,
Given input matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
rotate the input matrix:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
Run Code Online (Sandbox Code Playgroud)
我试图逐行进行,但我必须处理的问题是如果索引对已经改变了该怎么办.因此,如果我尝试将索引对[1,2]分配给[0,1],但之前已经更改了[0,1].我想出的解决方案是使用HashMap,将索引对作为键放在数组中,将原始数作为值.
这是我的代码
public void rotate(int[][] matrix) {
int n = matrix.length;
HashMap<int[], Integer> map = new HashMap<>();
for(int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if(map.containsKey(new int[]{n-j,i})){
matrix[i][j] = map.get(new int[]{n-j, i});
}
else{
int temp = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
map.put(new int[]{n-j,i}, temp);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但结果表明
if(map.containsKey(new int[]{n-j,i})){ …
Run Code Online (Sandbox Code Playgroud)