Welcome to Subscribe On Youtube

2380. Time Needed to Rearrange a Binary String

Description

You are given a binary string s. In one second, all occurrences of "01" are simultaneously replaced with "10". This process repeats until no occurrences of "01" exist.

Return the number of seconds needed to complete this process.

 

Example 1:

Input: s = "0110101"
Output: 4
Explanation: 
After one second, s becomes "1011010".
After another second, s becomes "1101100".
After the third second, s becomes "1110100".
After the fourth second, s becomes "1111000".
No occurrence of "01" exists any longer, and the process needed 4 seconds to complete,
so we return 4.

Example 2:

Input: s = "11100"
Output: 0
Explanation:
No occurrence of "01" exists in s, and the processes needed 0 seconds to complete,
so we return 0.

 

Constraints:

  • 1 <= s.length <= 1000
  • s[i] is either '0' or '1'.

 

Follow up:

Can you solve this problem in O(n) time complexity?

Solutions

  • class Solution {
        public int secondsToRemoveOccurrences(String s) {
            char[] cs = s.toCharArray();
            boolean find = true;
            int ans = 0;
            while (find) {
                find = false;
                for (int i = 0; i < cs.length - 1; ++i) {
                    if (cs[i] == '0' && cs[i + 1] == '1') {
                        char t = cs[i];
                        cs[i] = cs[i + 1];
                        cs[i + 1] = t;
                        ++i;
                        find = true;
                    }
                }
                if (find) {
                    ++ans;
                }
            }
            return ans;
        }
    }
    
  • class Solution {
    public:
        int secondsToRemoveOccurrences(string s) {
            bool find = true;
            int ans = 0;
            while (find) {
                find = false;
                for (int i = 0; i < s.size() - 1; ++i) {
                    if (s[i] == '0' && s[i + 1] == '1') {
                        swap(s[i], s[i + 1]);
                        ++i;
                        find = true;
                    }
                }
                if (find) {
                    ++ans;
                }
            }
            return ans;
        }
    };
    
  • class Solution:
        def secondsToRemoveOccurrences(self, s: str) -> int:
            ans = 0
            while s.count('01'):
                s = s.replace('01', '10')
                ans += 1
            return ans
    
    
  • func secondsToRemoveOccurrences(s string) int {
    	cs := []byte(s)
    	ans := 0
    	find := true
    	for find {
    		find = false
    		for i := 0; i < len(cs)-1; i++ {
    			if cs[i] == '0' && cs[i+1] == '1' {
    				cs[i], cs[i+1] = cs[i+1], cs[i]
    				i++
    				find = true
    			}
    		}
    		if find {
    			ans++
    		}
    	}
    	return ans
    }
    

All Problems

All Solutions