From 6ceab9afe9adae2376905acebea15bff48a8aa5f Mon Sep 17 00:00:00 2001 From: Dhanush Date: Sun, 14 Jul 2024 07:44:08 +0530 Subject: [PATCH 1/4] Update README.md --- .../0700-0799/0726.Number of Atoms/README.md | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/solution/0700-0799/0726.Number of Atoms/README.md b/solution/0700-0799/0726.Number of Atoms/README.md index d7d1da455232e..75c117643d50c 100644 --- a/solution/0700-0799/0726.Number of Atoms/README.md +++ b/solution/0700-0799/0726.Number of Atoms/README.md @@ -98,7 +98,49 @@ tags: #### Java ```java - +class Solution { + public String countOfAtoms(String formula) { + Map map = new HashMap<>(); + int[] stack = new int[1000]; + int top = 0, multiplier = 1, freq = 0; + char[] c = formula.toCharArray(); + for(int i = c.length - 1; i >= 0; i--) { + if(c[i] >= 'a' && c[i] <= 'z') { + int end = i--; + while(i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--; + String key = new String(c, i, end - i + 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if(c[i] >= 'A' && c[i] <= 'Z') { + String key = new String(c, i, 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if(c[i] >= '0' && c[i] <= '9') { + freq = c[i] - '0'; + int p = 10; + while(i-1 >= 0 && c[i-1] >= '0' && c[i-1] <= '9') { + freq += p * (c[--i] - '0'); + p *= 10; + } + } else if(c[i] == ')') { + stack[top++] = multiplier; + multiplier *= Math.max(freq, 1); + freq = 0; + } else { + multiplier = stack[--top]; + } + } + List keys = new ArrayList<>(map.keySet()); + Collections.sort(keys); + StringBuilder sb = new StringBuilder(); + for(String key: keys) { + sb.append(key); + int f = map.get(key); + if(f > 1) sb.append(f); + } + return sb.toString(); + } +} ``` #### C++ From f87618edfa959ab00bf8ed42381a7503df26e9c5 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 14 Jul 2024 17:02:10 +0800 Subject: [PATCH 2/4] Update README.md --- .../0700-0799/0726.Number of Atoms/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/solution/0700-0799/0726.Number of Atoms/README.md b/solution/0700-0799/0726.Number of Atoms/README.md index 75c117643d50c..2315f6e95b8de 100644 --- a/solution/0700-0799/0726.Number of Atoms/README.md +++ b/solution/0700-0799/0726.Number of Atoms/README.md @@ -104,25 +104,25 @@ class Solution { int[] stack = new int[1000]; int top = 0, multiplier = 1, freq = 0; char[] c = formula.toCharArray(); - for(int i = c.length - 1; i >= 0; i--) { - if(c[i] >= 'a' && c[i] <= 'z') { + for (int i = c.length - 1; i >= 0; i--) { + if (c[i] >= 'a' && c[i] <= 'z') { int end = i--; - while(i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--; + while (i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--; String key = new String(c, i, end - i + 1); map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); freq = 0; - } else if(c[i] >= 'A' && c[i] <= 'Z') { + } else if (c[i] >= 'A' && c[i] <= 'Z') { String key = new String(c, i, 1); map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); freq = 0; - } else if(c[i] >= '0' && c[i] <= '9') { + } else if (c[i] >= '0' && c[i] <= '9') { freq = c[i] - '0'; int p = 10; - while(i-1 >= 0 && c[i-1] >= '0' && c[i-1] <= '9') { + while (i - 1 >= 0 && c[i - 1] >= '0' && c[i - 1] <= '9') { freq += p * (c[--i] - '0'); p *= 10; } - } else if(c[i] == ')') { + } else if (c[i] == ')') { stack[top++] = multiplier; multiplier *= Math.max(freq, 1); freq = 0; @@ -133,10 +133,10 @@ class Solution { List keys = new ArrayList<>(map.keySet()); Collections.sort(keys); StringBuilder sb = new StringBuilder(); - for(String key: keys) { + for (String key : keys) { sb.append(key); int f = map.get(key); - if(f > 1) sb.append(f); + if (f > 1) sb.append(f); } return sb.toString(); } From 9a3b8a75f7220c3c1d9ee0d32868557474b7e8dd Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 14 Jul 2024 17:02:59 +0800 Subject: [PATCH 3/4] Update README_EN.md --- .../0726.Number of Atoms/README_EN.md | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/solution/0700-0799/0726.Number of Atoms/README_EN.md b/solution/0700-0799/0726.Number of Atoms/README_EN.md index 641c1face2c92..76917f0343ba2 100644 --- a/solution/0700-0799/0726.Number of Atoms/README_EN.md +++ b/solution/0700-0799/0726.Number of Atoms/README_EN.md @@ -98,7 +98,49 @@ tags: #### Java ```java - +class Solution { + public String countOfAtoms(String formula) { + Map map = new HashMap<>(); + int[] stack = new int[1000]; + int top = 0, multiplier = 1, freq = 0; + char[] c = formula.toCharArray(); + for (int i = c.length - 1; i >= 0; i--) { + if (c[i] >= 'a' && c[i] <= 'z') { + int end = i--; + while (i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--; + String key = new String(c, i, end - i + 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if (c[i] >= 'A' && c[i] <= 'Z') { + String key = new String(c, i, 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if (c[i] >= '0' && c[i] <= '9') { + freq = c[i] - '0'; + int p = 10; + while (i - 1 >= 0 && c[i - 1] >= '0' && c[i - 1] <= '9') { + freq += p * (c[--i] - '0'); + p *= 10; + } + } else if (c[i] == ')') { + stack[top++] = multiplier; + multiplier *= Math.max(freq, 1); + freq = 0; + } else { + multiplier = stack[--top]; + } + } + List keys = new ArrayList<>(map.keySet()); + Collections.sort(keys); + StringBuilder sb = new StringBuilder(); + for (String key : keys) { + sb.append(key); + int f = map.get(key); + if (f > 1) sb.append(f); + } + return sb.toString(); + } +} ``` #### C++ From 509eb967bed7651e2d693afc1bfb3af8978653ad Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 14 Jul 2024 17:03:17 +0800 Subject: [PATCH 4/4] Create Solution.java --- .../0726.Number of Atoms/Solution.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 solution/0700-0799/0726.Number of Atoms/Solution.java diff --git a/solution/0700-0799/0726.Number of Atoms/Solution.java b/solution/0700-0799/0726.Number of Atoms/Solution.java new file mode 100644 index 0000000000000..4a2cabc65937b --- /dev/null +++ b/solution/0700-0799/0726.Number of Atoms/Solution.java @@ -0,0 +1,43 @@ +class Solution { + public String countOfAtoms(String formula) { + Map map = new HashMap<>(); + int[] stack = new int[1000]; + int top = 0, multiplier = 1, freq = 0; + char[] c = formula.toCharArray(); + for (int i = c.length - 1; i >= 0; i--) { + if (c[i] >= 'a' && c[i] <= 'z') { + int end = i--; + while (i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--; + String key = new String(c, i, end - i + 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if (c[i] >= 'A' && c[i] <= 'Z') { + String key = new String(c, i, 1); + map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier); + freq = 0; + } else if (c[i] >= '0' && c[i] <= '9') { + freq = c[i] - '0'; + int p = 10; + while (i - 1 >= 0 && c[i - 1] >= '0' && c[i - 1] <= '9') { + freq += p * (c[--i] - '0'); + p *= 10; + } + } else if (c[i] == ')') { + stack[top++] = multiplier; + multiplier *= Math.max(freq, 1); + freq = 0; + } else { + multiplier = stack[--top]; + } + } + List keys = new ArrayList<>(map.keySet()); + Collections.sort(keys); + StringBuilder sb = new StringBuilder(); + for (String key : keys) { + sb.append(key); + int f = map.get(key); + if (f > 1) sb.append(f); + } + return sb.toString(); + } +}