在java中具有对时减少字符串长度

问题描述 投票:1回答:4

这里它给出错误----必需变量,找到值我的代码例如aabacc当我们得到任何一对像aa从字符串中删除它,最后的答案是(ba)。

公共类解决方案{

// Complete the superReducedString function below.
static String superReducedString(String s) {
    String sn;
    int j=0;
    for(int i=0;i<s.length()-1;i++)
    {
        if(s.charAt(i)!=s.charAt(i+1))
        {
            sn.charAt(j)=s.charAt(i);                           
            j++;
        }
    }
    return sn;
}
java string var charat
4个回答
1
投票

由于String在Java中是不可变的 - 字符串操作总是生成一个新的String,而前一个字符串保留在String Pool中。 StringBufferStringBuilder是可变对象,并提供字符串操作的方法

下面提供了使用StringBuilder的示例工作方法:

static String superReducedString(String s) {
    StringBuilder myName = new StringBuilder(s);
    int j=0;
    for(int i=0;i<s.length()-1;i++) {
        if(s.charAt(i)!=s.charAt(i+1)) {
            myName.setCharAt(j, s.charAt(i));                           
            j++;
        }
    }
    return myName.toString();
}

0
投票

你不能像sn.charAt(j)=s.charAt(i);那样进行这样的赋值,因为charAt()是返回结果的函数,而不是变量。你可以在这里使用StringBuilder

static String superReducedString(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        if (s.length() == i+1 || s.charAt(i) != s.charAt(i + 1)) {
            sb.append(s.charAt(i));
        } else {
            i++;
        }
    }
    return sb.toString();
}

s.length() == i+1检查它是否是最后一个字符。如果aabaccr结果将如预期bar


0
投票

只是另一种解决方案,以防其他答案对您不起作用:

static String superReducedString(String s) {
    char[] chars = s.toCharArray();
    String lastChar = "";
    ArrayList<String> newString = new ArrayList<>();
    for (char aChar : chars) {
        String currentChar = String.valueOf(aChar);
        if (lastChar.equals(currentChar))
            newString.remove(newString.size() - 1);
        else {
            newString.add(currentChar);
            lastChar = currentChar;
        }
    }

    AtomicReference<String> returnString = new AtomicReference<>("");
    newString.forEach(character-> returnString.set(returnString + character));
    return returnString.get();
}

0
投票

答案很简单。你不能从字符串中删除任何东西,但你可以根据需要将它们移动到另一个String

public class Solution {

    public static void main(String[] args) {

        String s = "abbccd", s1 = "";

        if(s.charAt(1) != s.charAt(0))
            s1 += s.charAt(0);
        if(s.charAt(s.length()-1) != s.charAt(s.length()-2))
            s1 += s.charAt(s.length()-1);

        for (int i = 1; i < s.length() - 1; i++) {
            if (s.charAt(i) != s.charAt(i - 1) && s.charAt(i) != s.charAt(i + 1))
                s1 += s.charAt(i);
        }
        System.out.println(s1);
    }

}

您创建另一个字符串。然后在从1(NOT 0)到s.length()-1(NOT s.length())迭代的for循环中,检查s.charAt(i)(当前字符)是否等于前一个或后一个。如果它不等于它们中的任何一个,你将它添加到第二个String然后你打印它。我们正在检查双方,这就是循环从1s.length()-1的原因,以避免出界异常。

编辑:检查第一个和最后一个字符。

© www.soinside.com 2019 - 2024. All rights reserved.