LeetCode-1768/389/28

1.交替合并字符串(1768)

题目描述:

给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
LeetCode-1768/389/28_第1张图片
思路: 这个比较简单,先建立一个循环来交替添加两个字符串中字符,当短的字符串中字符添加完后跳出循环,然后添加未添加完的那一个字符串中的字符。
代码:

class Solution {
    public String mergeAlternately(String word1, String word2) {
        StringBuilder mergeStr=new StringBuilder();
        int len1=word1.length(),len2=word2.length();
        int i=0,j=0;
        while(i<len1&&j<len2) {
            if(i==j) {
                mergeStr.append(word1.charAt(i));
                i++;
            } else {
                mergeStr.append(word2.charAt(j));
                j++;
            }

        }
        while(i!=len1) {
            mergeStr.append(word1.charAt(i));
            i++;
        }

        while(j!=len2) {
            mergeStr.append(word2.charAt(j));
            j++;
        }
        return mergeStr.toString();
    }
}

2.找不同(389)

题目描述:

给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
LeetCode-1768/389/28_第2张图片
思路: 因为两个字符串只相差一个字母并且我们要求的就是那个字母,那么这里就可以将两个字符串中的所有字符累加,然后相减得到那个添加的字符,最后返回可。
代码:

class Solution {
    public char findTheDifference(String s, String t) {
        int sum=0;
    
        for(char c : t.toCharArray()) {
            sum+=c-'a';
        }

        for(char c : s.toCharArray()) {
            sum-=c-'a';
        }

        return (char)(sum+'a');
    }
}

3.找出字符串中第一个匹配项的下标(28)

题目描述:

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
LeetCode-1768/389/28_第3张图片
思路: 遍历haystack字符串的每一个字符作为起始字符,然后在每一层循环中加一个while循环,当指向haystack字符串的指针和指向needle字符串的指针到末尾或者指向的字符不相同时跳出while循环,这时判断needle字符串是否遍历完成,如果是则返回下标,不是则将指向needle字符串的指针置为0准备下一次while循环。如果以haystack字符串中的每一个字符作为起始对比字符都找不到,那么返回-1。
代码:

class Solution {
    public int strStr(String haystack, String needle) {
        int len1=haystack.length(),len2=needle.length(),j=0;
        for(int i=0;i<len1;i++) {
            int k=i;
            while(j<len2&&k<len1&&haystack.charAt(k)==needle.charAt(j)) {
                k++;
                j++;
            }
            if(j==len2) {
                return i; 
            }
            j=0;

        }
        
        return -1;
    }
}

你可能感兴趣的:(leetcode,算法)