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.

&nbsp;
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".


&nbsp;
Constraints:


	1 &lt;= sentence.length &lt;= 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 &lt;= discount &lt;= 100


class Solution:
    def discountPrices(self, sentence: str, discount: int) -> str:
        s = sentence.split() # convert to List to easily update
        m = discount / 100 
        for i,word in enumerate(s):
            if word[0] == "$" and word[1:].isdigit(): # Check whether it is in correct format
                num = int(word[1:]) * (1-m) # discounted price
                w = "$" + "{:.2f}".format(num) #correctly format
                s[i] = w #Change inside the list
        
        return " ".join(s) #Combine the updated list
		```
class Solution {

    public String discountPrices(String sentence, int discount) {
        String x[] = sentence.split(" ");
        StringBuilder sb = new StringBuilder();
        for (String s : x) {
            if (isPrice(s)) sb.append(calc(Double.parseDouble(s.substring(1)), discount) + " "); 
            else sb.append(s + " ");
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    boolean isPrice(String s) {
        return s.startsWith("$") && s.substring(1).matches("\\d+");
    }

    String calc(double num, double discount) {
        double ans = num - (double) ((double) num * discount / 100.00);
        return "$" + String.format("%.2f", ans);
    }
}
class Solution {
public:
    string discountPrices(string sentence, int discount) {
        
		// doit is a function
        auto doit = [&](string word) {
		
            int n(size(word));
            if (word[0] != '$' or n == 1)   return word;
            
            long long price = 0;
            for (int i=1; i<n; i++) {
                if (!isdigit(word[i]))  return word;
                price = price*10 + (word[i]-'0');
            }
            
			stringstream ss2;
            double discountPercentage = (100 - discount) / 100.0;
            ss2 << fixed << setprecision(2) << (discountPercentage * price);
            return "$" + ss2.str();
        };
        
        string word, res;
        stringstream ss(sentence);
        
        while (ss >> word) {
            res += doit(word)+" ";
        }
        
        res.pop_back();
        return res;
    }
};
var discountPrices = function(sentence, discount) {
    let isNum = (num) => {
        if(num.length <= 1 || num[0] != '$') return false;
        for(let i = 1; i < num.length; ++i)
            if(!(num[i] >= '0' && num[i] <= '9'))
                return false;
        return true;
    };
    let x = sentence.split(' ');
    discount = 1 - (discount/100);
    for(let i = 0; i < x.length; ++i) 
        !isNum(x[i]) || (x[i] = `$${(Number(x[i].slice(1))*discount).toFixed(2)}`);
    return x.join(' ');
};
Apply Discount to Prices