Skip to main content
 首页 » 编程设计

java之Python 与 Java 循环

2025年05月04日27powertoolsteam

我正在解决 HackerRank 上的一些问题,我想我会尝试在 Python 中实现我已经在 J​​ava 中正确解决的相同解决方案。尽管我的代码几乎完全反射(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 中的下一个值,忽略您尝试重置其值。