File tree Expand file tree Collapse file tree 4 files changed +38
-6
lines changed
pullrequests/valid_anagram Expand file tree Collapse file tree 4 files changed +38
-6
lines changed Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ package validanagram
8
8
基本的にはそれぞれの文字列に含まれる文字の種類と数が一致しているかを見ています。
9
9
下の解法について、40行目で0未満になった場合のみfalseを返すのは一見おかしいように見えますが、30行目で文字数が等しいことを確認しているため、一方より多い文字があれば何かの文字は少なくなるはずであるため、ロジック的には問題ないと思います。
10
10
*/
11
- func isAnagram_step1 (s string , t string ) bool {
11
+ func isAnagramStep1 (s string , t string ) bool {
12
12
if len (s ) != len (t ) {
13
13
return false
14
14
}
@@ -26,7 +26,7 @@ func isAnagram_step1(s string, t string) bool {
26
26
return true
27
27
}
28
28
29
- func isAnagram_unicode_step1 (s string , t string ) bool {
29
+ func isAnagramUnicodeStep1 (s string , t string ) bool {
30
30
if len (s ) != len (t ) {
31
31
return false
32
32
}
Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ package validanagram
8
8
9
9
下の解法についてはStep1のロジックがわかりづらかったので、より明確になるように変更しました。
10
10
*/
11
- func isAnagram_step2 (s string , t string ) bool {
11
+ func isAnagramStep2 (s string , t string ) bool {
12
12
var frequency [26 ]int
13
13
for _ , r := range s {
14
14
frequency [r - 'a' ]++
@@ -24,7 +24,7 @@ func isAnagram_step2(s string, t string) bool {
24
24
return true
25
25
}
26
26
27
- func isAnagram_unicode_step2 (s string , t string ) bool {
27
+ func isAnagramUnicodeStep2 (s string , t string ) bool {
28
28
frequency := make (map [rune ]int )
29
29
for _ , r := range s {
30
30
frequency [r ]++
Original file line number Diff line number Diff line change 1
1
//lint:file-ignore U1000 Ignore all unused code
2
2
package validanagram
3
3
4
- func isAnagram_step3 (s string , t string ) bool {
4
+ func isAnagramStep3 (s string , t string ) bool {
5
5
return frequency (s ) == frequency (t )
6
6
}
7
7
@@ -15,7 +15,7 @@ func frequency(s string) [26]int {
15
15
16
16
// ちゃんとUnicodeに対応させるなら結合文字などを考慮する必要がある
17
17
// https://github.com/rihib/leetcode/pull/5#discussion_r1706198268
18
- func isAnagram_unicode_step3 (s string , t string ) bool {
18
+ func isAnagramUnicodeStep3 (s string , t string ) bool {
19
19
frequency := make (map [rune ]int )
20
20
for _ , r := range s {
21
21
frequency [r ]++
Original file line number Diff line number Diff line change
1
+ //lint:file-ignore U1000 Ignore all unused code
2
+ package validanagram
3
+
4
+ func isAnagramStep4 (s string , t string ) bool {
5
+ return frequencies (s ) == frequencies (t )
6
+ }
7
+
8
+ func frequencies (s string ) [26 ]int {
9
+ var f [26 ]int
10
+ for _ , r := range s {
11
+ f [r - 'a' ]++
12
+ }
13
+ return f
14
+ }
15
+
16
+ // ちゃんとUnicodeに対応させるなら結合文字などを考慮する必要がある
17
+ // https://github.com/rihib/leetcode/pull/5#discussion_r1706198268
18
+ func isAnagramUnicodeStep4 (s string , t string ) bool {
19
+ frequencies := make (map [rune ]int )
20
+ for _ , r := range s {
21
+ frequencies [r ]++
22
+ }
23
+ for _ , r := range t {
24
+ frequencies [r ]--
25
+ }
26
+ for _ , n := range frequencies {
27
+ if n != 0 {
28
+ return false
29
+ }
30
+ }
31
+ return true
32
+ }
You can’t perform that action at this time.
0 commit comments