这里它给出错误----必需变量,找到值我的代码例如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;
}
由于String在Java中是不可变的 - 字符串操作总是生成一个新的String,而前一个字符串保留在String Pool中。 StringBuffer和StringBuilder是可变对象,并提供字符串操作的方法
下面提供了使用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();
}
你不能像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
只是另一种解决方案,以防其他答案对您不起作用:
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();
}
答案很简单。你不能从字符串中删除任何东西,但你可以根据需要将它们移动到另一个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
然后你打印它。我们正在检查双方,这就是循环从1
到s.length()-1
的原因,以避免出界异常。
编辑:检查第一个和最后一个字符。