【问题标题】:How to Optimize Code and Code Optimization Theory如何优化代码和代码优化理论
【发布时间】:2022-11-23 01:14:10
【问题描述】:

我写了一个编码挑战。挑战的要求是颠倒句子中的特定单词=>仍然保持句子中单词的顺序但颠倒单词的字符。

输入样本是这样的:RemoteIo is awesome-Candiates pass interview-best candiates are selected

以上输入的示例输出:

oIetomeR si emosewa 
setaidnaC ssap weivretni 
tseb setaidnac era detceles

如您所见,输入句子由 - 字符分隔,这意味着我们在上面的示例中有 3 个句子,句子只能包含字母字符和空格(两个单词之间有一个空格)

所以我的问题是如何优化下面的代码,并且有关于代码优化的任何理论/原则。我在Java中的代码实现:

public class Test1 {
    public static void main (String[] args) throws java.lang.Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        
        // Put sentences to a String array.
        String[] data = input.split("-");
        
        // Loop throw sentence array
        for(int i = 0; i < data.length; i++) {
            
            // Put the words from the sentence to a String array.
            String[] words = data[i].split(" ");
            
            // Loop throw the word array
            for(int w = 0; w < words.length; w++) {
                
                // Revert the characters of each word
                for (int j = words[w].length() - 1;  j >=0; j--) {
                    if (j != 0) {
                        System.out.print(words[w].charAt(j));
                    } else {
                        System.out.print(words[w].charAt(j) + " ");
                    }
                }
                if ( w == words.length -1) {
                    System.out.println();
                }
            }
        }
    }
}

【问题讨论】:

  • 像这样将打印命令与您的逻辑混合几乎总是一个坏主意。将单词映射到它们的反面,然后用空格连接它们,不要尝试打印空格,你只会让自己头疼。
  • 您是否有理由相信您的代码优化不足?对我来说,这看起来非常合理。一个好的规则是选择一个好的算法,但在需要之前不要担心进一步的优化。
  • @EdwardPeters 我的审阅者要求我优化我的代码,所以我不知道从哪里开始。
  • “审阅者”作为工作中的代码审阅者,同学......?我会让你做很多清理工作,但我质疑任何人告诉你这需要从性能的角度进行优化的判断。

标签: java algorithm optimization data-structures


【解决方案1】:

@爱德华彼得斯

代码优化与@Edward Peters 的评论

public class Test1 {
    public static void main (String[] args) throws java.lang.Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        
        // Put sentences to a String array.
        String[] data = input.split("-");
        
        StringBuilder reverseBuilder = new StringBuilder();
        
        // Loop throw sentence array
        for(int i = 0; i < data.length; i++) {
            
            // Put the words from the sentence to a String array.
            String[] words = data[i].split(" ");
            
            // Loop throw the word array
            for(int w = 0; w < words.length; w++) {
                
                // Revert the characters of each word
                for (int j = words[w].length() - 1;  j >=0; j--) {
                    if (j != 0) {
                        reverseBuilder.append(words[w].charAt(j));
                        // System.out.print(words[w].charAt(j));
                    } else {
                        // System.out.print(words[w].charAt(j) + " ");
                        reverseBuilder.append(words[w].charAt(j));
                        reverseBuilder.append(' ');
                    }
                }
                if ( w == words.length -1) {
                    // System.out.println();
                    System.out.println(reverseBuilder);
                    reverseBuilder = new StringBuilder();
                }
            }
        }
    }
}

【讨论】:

  • 所以我的评论不是优化,只是一些清理。我也不喜欢 StringBuilder - 你越早学会使用 .map 你就会越快乐,尽管你也会更快乐地转向一种更好支持的非 Java 语言。 (达到目标。)更重要的是:如果您要修改问题,请将其编辑到 OP 中,而不是将其添加为答案。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
相关资源
最近更新 更多