回答編集履歴

2

加筆修正

2018/05/03 11:05

投稿

退会済みユーザー
test CHANGED
@@ -1,19 +1,3 @@
1
- `$a[$i], $b[$i]`って表記があるけど、
2
-
3
- $i番目の文字ひとつ欲しい場合はこれだとおかしい。
4
-
5
- [PHP: substr - Manual](http://php.net/manual/ja/function.substr.php)
6
-
7
- を使って
8
-
9
- `substr($a, $i, 1)`みたいに書かないと。
10
-
11
-
12
-
13
- ---
14
-
15
-
16
-
17
1
  > 2つの文字列のスペルがまったく同じであれば、2を返す。
18
2
 
19
3
  > 二つの文字列のスペルが1つだけ異なる場合、1を返す。
@@ -68,7 +52,7 @@
68
52
 
69
53
  for($i = 0; $i < strlen($a); $i++) {
70
54
 
71
- if($this->isSame(substr($a, $i, 1), substr($b, $i, 1)) == 1){
55
+ if($this->isSame($a[$i], $b[$i]) == 1){
72
56
 
73
57
  $count +=1;
74
58
 

1

加筆修正

2018/05/03 11:05

投稿

退会済みユーザー
test CHANGED
@@ -7,3 +7,91 @@
7
7
  を使って
8
8
 
9
9
  `substr($a, $i, 1)`みたいに書かないと。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ > 2つの文字列のスペルがまったく同じであれば、2を返す。
18
+
19
+ > 二つの文字列のスペルが1つだけ異なる場合、1を返す。
20
+
21
+ > その他は、0を返す。
22
+
23
+
24
+
25
+ 3行それぞれを評価するのに、最も重い処理は2を返す条件じゃないかな、
26
+
27
+ 次に重いのは1を返す条件で、
28
+
29
+ 簡単に判別できて大多数の結果がそうなるであろう条件は0。
30
+
31
+ って考えると、
32
+
33
+ 0を返す条件をもう少し深掘りする。
34
+
35
+
36
+
37
+ ・互いの文字列長が異なる
38
+
39
+
40
+
41
+ って判定を最初に持ってくれば、さっさと0を返して終われる判定。
42
+
43
+
44
+
45
+ $this->outputをわざわざ使う理由がよくわからないけど、
46
+
47
+ メソッド内ローカル変数を使ってもいいんだよ。
48
+
49
+
50
+
51
+ 一文字でも違っていれば1を返すのだから、
52
+
53
+ 文字列のアタマから照合して
54
+
55
+
56
+
57
+ ```
58
+
59
+ public function compare($a, $b){
60
+
61
+ if (strlen($a) !== strlen($b)) {
62
+
63
+ return 0;
64
+
65
+ }
66
+
67
+ $count = 0;
68
+
69
+ for($i = 0; $i < strlen($a); $i++) {
70
+
71
+ if($this->isSame(substr($a, $i, 1), substr($b, $i, 1)) == 1){
72
+
73
+ $count +=1;
74
+
75
+ }
76
+
77
+ }
78
+
79
+ if($this->count == 0){
80
+
81
+ return 2;
82
+
83
+ }
84
+
85
+ else {
86
+
87
+ return 1;
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ ってのはダメでしょうか。