【问题标题】:Counting Characters only if they are right next to each other仅在字符彼此相邻时计算字符
【发布时间】:2018-09-08 08:35:18
【问题描述】:

仅当字符彼此相邻时如何计算字符,否则只需按原样打印字符。根据我对Java的一点了解,写了如下代码。

例如字符串 w="kjiikkkjial";

结果应该是:kji2k3jial

    String am ="asbbaamkkkjkssg";
    char op = 0;

    char[] ch = am.toCharArray();
    for(int i=0; i<ch.length; i++) {
        int k=1;
        for(int j=i+1; j<ch.length; j++) {
            if(ch[i]==ch[j]) {
               k++;
               op=ch[j];    
               i=j;
            }
            else  break;
        }
        if(k>1)
            System.out.print(op+""+k);
        else
            System.out.print(ch[i]);    
    }

【问题讨论】:

  • xyz怎么办?” => 通过编写代码!如果您这样做并遇到困难,请向我们展示您的尝试并解释您遇到的确切问题。
  • 你想要的是运行长度编码。您尝试过什么(您知道如何将数字附加到字符串?比较两个字符?索引字符串?等等)?
  • 看起来像复制品。这可能是你的答案:stackoverflow.com/questions/11442162/java-run-length-encoding
  • @Selenvirtuose,对不起,我忘了添加代码,现在我有..
  • @komiii 不一样,字符串只是由重复的字符组成。

标签: java


【解决方案1】:

这应该可行,使用输入作为字符串调用此函数,它将返回预期的输出。

public static String runLengthEncoding(String text) {
    String encodedString = "";

    for (int i = 0, count = 1; i < text.length(); i++) {
        if (i + 1 < text.length() && text.charAt(i) == text.charAt(i + 1))
            count++;
        else {
            encodedString = encodedString.concat(Character.toString(text.charAt(i)));
            if(count>1) {
                encodedString = encodedString.concat(Integer.toString(count));
            }
            count = 1;
        }
    }
    return encodedString;
}

这是ideone 上工作示例的链接。

【讨论】:

  • 我的代码也能正常工作,你能告诉我我的逻辑有什么问题吗?
  • 您正在使用 2 个循环,第一个循环遍历字符串,不进行比较,第二个循环进行比较,您可以在同一个地方进行比较,就像我在回答中所做的那样,解决方案可能是正确的,但效率不高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多