展开分解成重复嵌套组件的字符串[关闭]
Posted
技术标签:
【中文标题】展开分解成重复嵌套组件的字符串[关闭]【英文标题】:Expand string broken up into repeated, nested components [closed] 【发布时间】:2021-11-28 03:22:22 【问题描述】:我正在解决一个问题,给定一个字符串,括号中的子字符串后跟大括号中的值,字符串通过重复子字符串的次数来扩展。所以如果你有 (ab(d)3)2 你会得到 abdddabddd。
我觉得我在正确的轨道上,但 1. 这效率很低, 2. 测试似乎没有返回。希望得到一些帮助!
public class ExpandedString
public static String expandedString(String inputStr)
while (inputStr.contains("("))
for (int i = 0; i < inputStr.length(); i++)
//check if there's something to repeat
if (inputStr.charAt(i) == '')
int temp = i;
//find what you need to repeat
while (inputStr.charAt(temp) != '(')
temp--;
String inputStr2 = inputStr.substring(i);
int numTimes = i + inputStr.indexOf("");
//replace (blah) with blah times repeated numTimes
StringBuilder repeated = new StringBuilder();
for(int j = 0; j<numTimes;j++)
repeated.append(inputStr.substring(temp + 1, i - 1));
inputStr.replace(inputStr.substring(temp, i), repeated.toString());
//start again
i = 0;
return inputStr;
public static void main(String[] args)
Scanner in = new Scanner(System.in);
// input for inputStr
String inputStr = in .nextLine();
String result = expandedString(inputStr);
System.out.print(result);
【问题讨论】:
请添加失败的测试用例预期输出、实际输出和调试信息。 【参考方案1】:这是一个使用 StringBuilder 堆栈和当前 StringBuilder 的解决方案。
当读取(
时,当前的StringBuilder 被压入堆栈并创建一个新的StringBuilder。
读取)
时,会提取乘数mul
,并将当前StringBuilder的值追加mul
次到从栈中弹出的StringBuilder中。
否则,将 char 附加到当前 StringBuilder。
import java.util.Stack;
public class Expand
public static String expand(String pattern)
StringBuilder sb = new StringBuilder();
Stack<StringBuilder> stack = new Stack<StringBuilder>();
int len = pattern.length();
int i = 0;
while(i<len)
char c = pattern.charAt(i);
if(c=='(')
stack.push(sb);
sb = new StringBuilder();
else if(c==')')
String s = sb.toString();
int k = pattern.indexOf('', i);
int mul = Integer.parseInt(pattern.substring(i+2, k));
sb = stack.pop();
for(int j=0;j<mul;j++)
sb.append(s);
i = k;
else
sb.append(c);
i++;
return sb.toString();
public static void main(String[] args)
System.out.println(expand("(ab(d)3)2"));
输出:
abdddabddd
【讨论】:
以上是关于展开分解成重复嵌套组件的字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章