小编tim*_*ket的帖子

给定 2 个字符串,仅删除一位数字以使 1 个字符串按字典顺序更小

我正在尝试解决 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)

java string lexicographic-ordering

5
推荐指数
1
解决办法
1万
查看次数

检索放在HashMap中的数组

下面的代码是我为一个问题写的答案,该问题要求将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)

java arrays hashmap

0
推荐指数
1
解决办法
70
查看次数

标签 统计

java ×2

arrays ×1

hashmap ×1

lexicographic-ordering ×1

string ×1