teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

加筆修正

2018/05/03 11:05

投稿

退会済みユーザー
answer CHANGED
@@ -1,11 +1,3 @@
1
- `$a[$i], $b[$i]`って表記があるけど、
2
- $i番目の文字ひとつ欲しい場合はこれだとおかしい。
3
- [PHP: substr - Manual](http://php.net/manual/ja/function.substr.php)
4
- を使って
5
- `substr($a, $i, 1)`みたいに書かないと。
6
-
7
- ---
8
-
9
1
  > 2つの文字列のスペルがまったく同じであれば、2を返す。
10
2
  > 二つの文字列のスペルが1つだけ異なる場合、1を返す。
11
3
  > その他は、0を返す。
@@ -33,7 +25,7 @@
33
25
  }
34
26
  $count = 0;
35
27
  for($i = 0; $i < strlen($a); $i++) {
36
- if($this->isSame(substr($a, $i, 1), substr($b, $i, 1)) == 1){
28
+ if($this->isSame($a[$i], $b[$i]) == 1){
37
29
  $count +=1;
38
30
  }
39
31
  }

1

加筆修正

2018/05/03 11:05

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,48 @@
2
2
  $i番目の文字ひとつ欲しい場合はこれだとおかしい。
3
3
  [PHP: substr - Manual](http://php.net/manual/ja/function.substr.php)
4
4
  を使って
5
- `substr($a, $i, 1)`みたいに書かないと。
5
+ `substr($a, $i, 1)`みたいに書かないと。
6
+
7
+ ---
8
+
9
+ > 2つの文字列のスペルがまったく同じであれば、2を返す。
10
+ > 二つの文字列のスペルが1つだけ異なる場合、1を返す。
11
+ > その他は、0を返す。
12
+
13
+ 3行それぞれを評価するのに、最も重い処理は2を返す条件じゃないかな、
14
+ 次に重いのは1を返す条件で、
15
+ 簡単に判別できて大多数の結果がそうなるであろう条件は0。
16
+ って考えると、
17
+ 0を返す条件をもう少し深掘りする。
18
+
19
+ ・互いの文字列長が異なる
20
+
21
+ って判定を最初に持ってくれば、さっさと0を返して終われる判定。
22
+
23
+ $this->outputをわざわざ使う理由がよくわからないけど、
24
+ メソッド内ローカル変数を使ってもいいんだよ。
25
+
26
+ 一文字でも違っていれば1を返すのだから、
27
+ 文字列のアタマから照合して
28
+
29
+ ```
30
+ public function compare($a, $b){
31
+ if (strlen($a) !== strlen($b)) {
32
+ return 0;
33
+ }
34
+ $count = 0;
35
+ for($i = 0; $i < strlen($a); $i++) {
36
+ if($this->isSame(substr($a, $i, 1), substr($b, $i, 1)) == 1){
37
+ $count +=1;
38
+ }
39
+ }
40
+ if($this->count == 0){
41
+ return 2;
42
+ }
43
+ else {
44
+ return 1;
45
+ }
46
+ }
47
+ ```
48
+
49
+ ってのはダメでしょうか。