https://www.hackerrank.com/challenges/counting-valleys/problem中存在一个计数谷问题 我知道我不是最好的解决方案,但是它在带有示例测试用例的系统上可以正常工作,但似乎在具有相同测试用例的hackersRank上失败。这会在“ climbStack.peek()”上引发emptyStack异常 我用J9编译器尝试了以下代码,但J7样式为hackerrank仅支持j7
// Complete the countingValleys function below.
static int countingValleys(int n, String s)
{
Stack<String> climbStack = new Stack<String>();
boolean mClimb = false;
int valleyCount=0;
String[] trek = s.split("");
for(int i =0 ; i < trek.length; i++)
{
if(climbStack.empty() && trek[i].equals("U"))
{
mClimb = true;
climbStack.push(trek[i]);
continue;
}
else if(climbStack.empty() && trek[i].equals("D"))
{
mClimb = false;
climbStack.push(trek[i]);
continue;
}
if(climbStack.peek().equals(trek[i]))
{
climbStack.push(trek[i]);
}
else
{
climbStack.pop();
if(climbStack.empty() && mClimb == false && i <= n)
{
valleyCount++;
}
}
}
return valleyCount;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
//BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int n = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
String s = scanner.nextLine();
int result = countingValleys(n, s);
System.out.println(result);
scanner.close();
}
输入 8 乌迪都(UDDDUDUU)
结果1
答案 0 :(得分:1)
我的猜测是,方法split()
在J7中的工作方式不同于J9。如果您的输入仅是'U'和'D'字符的字符串,并且需要将它们分成单个字母,那么我建议使用方法toCharArray()
而不是split()
,这将为您提供{{1}长度为8的}-使用您发布的示例输入,并且方法char[]
自Java发行以来就很早。