我正在解决 HackerRank 上的一些问题,我想我会尝试在 Python 中实现我已经在 Java 中正确解决的相同解决方案。尽管我的代码几乎完全反射(reflect)了我以前的 Python 解决方案,但我在 if input_str[i-1] == input_str[i]
行中遇到了越界异常。 Python 循环中是否存在可能导致这种差异的不同行为?两者的测试用例是相同的。
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
solve(input);
}
public static void solve(String str) {
String s = new String(str);
for (int i=1; i < s.length(); i++) {
if (s.charAt(i-1) == s.charAt(i)) {
s = s.substring(0, i-1) + s.substring(i+1, s.length());
i = 0;
}
if (s.length() == 0) {
System.out.println("Empty String");
return;
}
}
System.out.println(s);
}
}
这是同一问题的代码,但使用的是 Python 2.7。
input_str = raw_input()
for i in xrange(1, len(input_str)):
if input_str[i-1] == input_str[i]:
input_str = input_str[0:i-1] + input_str[i+1:len(input_str)]
i = 0
if len(input_str) == 0:
print "Empty String"
break
print input_str
最佳答案
在 Java 循环中,每次迭代都会重新计算 s.length()
。在 Python 中,len(input_str)
仅计算一次,并且在您修改 if
block 中的 input_str
后不会反射(reflect)正确的长度。
同样,分配 i = 0
不会按照您希望的方式工作。 i
将采用 xrange
中的下一个值,忽略您尝试重置其值。
关于java - Python 与 Java 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510897/