Welcome to Subscribe On Youtube

2288. Apply Discount to Prices

Description

A sentence is a string of single-space separated words where each word can contain digits, lowercase letters, and the dollar sign ''. A word represents a price if it is a sequence of digits preceded by a dollar sign.

  • For example, "100", "23", and "6" represent prices while "100", "", and "1e5" do not.

You are given a string sentence representing a sentence and an integer discount. For each word representing a price, apply a discount of discount% on the price and update the word in the sentence. All updated prices should be represented with exactly two decimal places.

Return a string representing the modified sentence.

Note that all prices will contain at most 10 digits.

 

Example 1:

Input: sentence = "there are 1 2 and 5 candies in the shop", discount = 50
Output: "there are 0.50 1.00 and 5 candies in the shop"
Explanation: 
The words which represent prices are "1" and "2". 
- A 50% discount on "1" yields "0.50", so "1" is replaced by "0.50".
- A 50% discount on "2" yields "1". Since we need to have exactly 2 decimal places after a price, we replace "2" with "1.00".

Example 2:

Input: sentence = "1 2 3 4 5 6 7 8 9 10", discount = 100
Output: "1 2 0.00 4 0.00 0.00 7 8 0.00 10"
Explanation: 
Applying a 100% discount on any price will result in 0.
The words representing prices are "3", "5", "6", and "9".
Each of them is replaced by "0.00".

 

Constraints:

  • 1 <= sentence.length <= 105
  • sentence consists of lowercase English letters, digits, ' ', and ''.
  • sentence does not have leading or trailing spaces.
  • All words in sentence are separated by a single space.
  • All prices will be positive numbers without leading zeros.
  • All prices will have at most 10 digits.
  • 0 <= discount <= 100

Solutions

  • class Solution {
        public String discountPrices(String sentence, int discount) {
            String[] words = sentence.split(" ");
            for (int i = 0; i < words.length; ++i) {
                if (check(words[i])) {
                    double t = Long.parseLong(words[i].substring(1)) * (1 - discount / 100.0);
                    words[i] = String.format("$%.2f", t);
                }
            }
            return String.join(" ", words);
        }
    
        private boolean check(String s) {
            if (s.charAt(0) != '$' || s.length() == 1) {
                return false;
            }
            for (int i = 1; i < s.length(); ++i) {
                if (!Character.isDigit(s.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
    }
    
  • class Solution {
    public:
        string discountPrices(string sentence, int discount) {
            istringstream is(sentence);
            string w;
            string ans;
            auto check = [](string s) {
                if (s[0] != '$' || s.size() == 1) {
                    return false;
                }
                for (int i = 1; i < s.size(); ++i) {
                    if (!isdigit(s[i])) {
                        return false;
                    }
                }
                return true;
            };
            while (is >> w) {
                if (check(w)) {
                    long long v = stoll(w.substr(1)) * (100 - discount);
                    char t[20];
                    sprintf(t, "$%lld.%02lld", v / 100, v % 100);
                    ans += t;
                } else {
                    ans += w;
                }
                ans += ' ';
            }
            ans.pop_back();
            return ans;
        }
    };
    
  • class Solution:
        def discountPrices(self, sentence: str, discount: int) -> str:
            ans = []
            for w in sentence.split():
                if w[0] == '$' and w[1:].isdigit():
                    w = f'${int(w[1:]) * (1 - discount / 100):.2f}'
                ans.append(w)
            return ' '.join(ans)
    
    
  • func discountPrices(sentence string, discount int) string {
    	words := strings.Split(sentence, " ")
    	for i, w := range words {
    		if w[0] == '$' {
    			if v, err := strconv.Atoi(w[1:]); err == nil {
    				words[i] = fmt.Sprintf("$%.2f", float64(v*(100-discount))/100)
    			}
    		}
    	}
    	return strings.Join(words, " ")
    }
    
  • function discountPrices(sentence: string, discount: number): string {
        const sell = (100 - discount) / 100;
        let reg = new RegExp(/^(\$)(([1-9]\d*\.?\d*)|(0\.\d*))$/g);
        let arr = sentence.split(' ').map(d => {
            if (!reg.test(d)) return d;
            return d.replace(reg, (s, $1, $2) => {
                return `$${(sell * $2).toFixed(2)}`;
            });
        });
        return arr.join(' ');
    }
    
    

All Problems

All Solutions