

現在、leetcodeの1768. Merge Strings Alternatelyを解いています。  
下記が問題文(*1)と例題(*2)です  
事象は、文字列結合した際に、文字Kが文字aを消してしまうことです。  
コードは'(*3)にあります。  
この原因と改善方法について教えていただけると幸いです。

*1

> 2 つの文字列 word1 と word2 が与えられます。 word1
> から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。
>
> マージされた文字列を返します。

*2  
Example 1:

[code]

    Input: word1 = "abc", word2 = "pqr"
    Output: "apbqcr"
    Explanation: The merged string will be merged as so:
    word1:  a   b   c
    word2:    p   q   r
    merged: a p b q c r
    
[/code]

*3
[code]

    class Solution {
        public String mergeAlternately(String word1, String word2) {
            int len = word1.length() + word2.length();
            int count =0;
            char [] c1 =  word1.toCharArray();
            char [] c2 =  word2.toCharArray();
            String merge=""; 
             char tmp1 = 'A';
             char tmp2 = 'A';
             int count1=0;
             int count2=0;
            for (char c3 : c1){
                merge+=c3;          
                merge+=tmp1;
                 tmp1++;
                count1++;         
            }
            System.out.println(merge);
        
            for (char c4:c2){
                merge = merge.replace(tmp2, c4);
                tmp2++;
                count2++;
            }
     System.out.println(merge);
            if(count1 < count2){
                for (int i=count1; i < word2.length();i++)
                merge += word2.charAt(i);
            } else{
            merge =  merge.replaceAll("[^a-z]", "");
                if(merge.length() != len){
                    merge = merge.substring(0, merge.length()-1);
                }
            }
        return merge;
        }
    }
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/nFsk6.jpg)](https://i.stack.imgur.com/nFsk6.jpg)


CC BY-SA 4.0
2023-09-17T02:26:20.617
96235
2023-09-17T06:16:32.347
2023-09-17T05:45:13.747
3060
55185
question
java アルゴリズム array データ構造
文字列結合した際に、文字Kが文字aを消してしまう


`char tmp2 = 'A';`で初期化した`tmp2`に対して、26回以上`tmp2++;`を繰り返したらどうなるでしょうか。  
実際に試すと分かりますが、'Z'の次は'[','\',...'`'と変わっていき、32回目で'a'になります。

問題の入力例だと`word2`が33文字なので、`merge = merge.replace(tmp2, c4);`が`merge =
merge.replace('a', 'x');`となり、'a'が'x'に上書きされて、このような結果になります。

そもそも、現状のやり方だと、33文字以上の入力がある場合に破綻してしまうので、やり方自体を見直さないと修正はできません。


CC BY-SA 4.0
2023-09-17T06:16:32.347
96238
2023-09-17T06:16:32.347
43506
96235
answer