Java 减少字符串
我在解决一个问题,把形式简化为不可简化形式。这就是问题所在 Shil有一个字符串S,由N个小写英文字母组成。在一次操作中,他可以删除任何具有相同值的相邻字母对。例如,字符串“aabcc”在操作后将变为“aab”或“bcc” Shil希望尽可能减少S。为此,他将尽可能多次重复上述操作。通过查找和打印不可还原的形式来帮助您摆脱困境 如果最后一个字符串为空,则打印空字符串;否则,打印最后的不可还原字符串 样本输入0 aaabccddd 样本输出0 abd 样本输入1 baab 样本输出1 空字符串 样本输入2 aa 样本输出2 空字符串 解释 示例案例0: Shil可以执行以下操作序列以获取最终字符串: 因此,我们印刷 示例案例1: Shil可以执行以下操作序列以获取最终字符串: aaabccddd->abccddd abccddd->abddd abdd->abd 因此,我们打印abd 示例案例1: baab->bb bb->空字符串。 到目前为止,我所做的是尝试通过Java中的StringBuilder来解决这个问题。但是有些测试用例通过了,而另一些测试用例没有通过,我无法找出错误是什么 这是我迄今为止尝试过的代码Java 减少字符串,java,string,stringbuilder,Java,String,Stringbuilder,我在解决一个问题,把形式简化为不可简化形式。这就是问题所在 Shil有一个字符串S,由N个小写英文字母组成。在一次操作中,他可以删除任何具有相同值的相邻字母对。例如,字符串“aabcc”在操作后将变为“aab”或“bcc” Shil希望尽可能减少S。为此,他将尽可能多次重复上述操作。通过查找和打印不可还原的形式来帮助您摆脱困境 如果最后一个字符串为空,则打印空字符串;否则,打印最后的不可还原字符串 样本输入0 aaabccddd 样本输出0 abd 样本输入1 baab 样本输出1 空字符串 样
import java.util.Scanner;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
StringBuilder sb=新的StringBuilder(scan.nextLine());
对于(int i=0;i
}
输入,如aaabccddd
和aa通过。但当输入为baab时失败。问题是您只需在字符串中运行一次循环。 例如: 字符串“baab”,您只需删除“aa”并完成循环 解决方案:使用带有标志isNonReducible的递归,循环直到它给出空字符串或标志isNonReducible=true
public class Solution {
public static StringBuilder checkReducible(StringBuilder sb) {
boolean isNonReducible = true;
for (int i = 0; i < sb.length() - 1; i++) {
if (sb.charAt(i) == sb.charAt(i + 1)) {
isNonReducible = false;
sb.delete(i, i + 2);
}
}
if (sb.length() == 0) {
return new StringBuilder("Empty String");
}
else {
if(!isNonReducible) {
sb = checkReducible(sb);
}
return sb;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder(scan.nextLine());
System.out.println(checkReducible(sb));
scan.close();
}
}
公共类解决方案{
公共静态StringBuilder可检查还原(StringBuilder sb){
布尔不可约=真;
对于(int i=0;i
问题是您只需在字符串中运行一次循环。
例如:
字符串“baab”,您只需删除“aa”并完成循环
解决方案:使用带有标志isNonReducible的递归,循环直到它给出空字符串或标志isNonReducible=true
public class Solution {
public static StringBuilder checkReducible(StringBuilder sb) {
boolean isNonReducible = true;
for (int i = 0; i < sb.length() - 1; i++) {
if (sb.charAt(i) == sb.charAt(i + 1)) {
isNonReducible = false;
sb.delete(i, i + 2);
}
}
if (sb.length() == 0) {
return new StringBuilder("Empty String");
}
else {
if(!isNonReducible) {
sb = checkReducible(sb);
}
return sb;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder(scan.nextLine());
System.out.println(checkReducible(sb));
scan.close();
}
}
公共类解决方案{
公共静态StringBuilder可检查还原(StringBuilder sb){
布尔不可约=真;
对于(int i=0;i
您必须使用while循环。您的代码的问题是它只在代码中迭代一次。在第一次迭代中,虽然您的输入“baab”变为“bb”,但它会检查第二个b,并尝试在i+1中找到一个“b”(它不存在)。将for循环更改为while循环,如下所示
import java.util.Scanner;
public class Solution{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder(scan.nextLine());
int c=0;
while(c< sb.length()-1){
if(sb.charAt(c) == sb.charAt(c+1)){
sb.delete(c,c+2);
c=0;
}
else{
c+=1;
}
}
if(sb.length() == 0)
System.out.println("Empty String");
else
System.out.println(sb.toString());
}
import java.util.Scanner;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
StringBuilder sb=新的StringBuilder(scan.nextLine());
int c=0;
而(c
}您必须使用while循环。您的代码的问题是它只在代码中迭代一次。在第一次迭代中,虽然您的输入“baab”变为“bb”,但它会检查第二个b,并尝试在i+1中找到一个“b”(它不存在)。将for循环更改为while循环,如下所示
import java.util.Scanner;
public class Solution{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder(scan.nextLine());
int c=0;
while(c< sb.length()-1){
if(sb.charAt(c) == sb.charAt(c+1)){
sb.delete(c,c+2);
c=0;
}
else{
c+=1;
}
}
if(sb.length() == 0)
System.out.println("Empty String");
else
System.out.println(sb.toString());
}
import java.util.Scanner;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
StringBuilder sb=新的StringBuilder(scan.nextLine());
int c=0;
而(c
}你可以做
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder sb =new StringBuilder(in.nextLine());
for (int i=0; i<sb.length()-1; i++){
if(sb.charAt(i)==sb.charAt(i+1)){
sb.delete(i, i+2);
i=-1;
}
}
if(sb.length()==0){
System.out.println("Empty String");
}else{
System.out.println(sb);
}
}