簡體   English   中英

Python vs Java循環

[英]Python vs Java Loop

我正在處理HackerRank上的一些問題,我想我會嘗試在Python中實現與我已經在Java中正確解決的解決方案相同的解決方案。 盡管我的代碼幾乎完全反映了我以前的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塊中修改input_str后不能反映正確的長度。

同樣,分配i = 0並不能達到您希望的方式。 i將采用xrange的下一個值,而xrange嘗試重置其值。

我相信這樣做會浪費很多時間和系統資源。 更好的解決方案是將算法更改為僅對input_str一次迭代的算法。 在這種情況下,您將獲得O(n)執行時間。 我編輯的代碼如下所示:

input_str = input()
input_strR = input_str[0]
for i in range(1, len(input_str)):
    if input_str[i-1] != input_str[i]:
        input_strR = input_strR + input_str[i]
    if len(input_str) == 0:
        print ("Empty String")
        break

print (input_strR)

在這種情況下,引入了一個新變量,並在刪除重復項時添加了所有第一個字符。

我將建立在funaquarius24上,甚至不使用索引:

input_str = raw_input()
result = input_str[0]
for c in input_str[1:]:
    if c != result[-1]:
        result += c
print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM