class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param t string字符串 
     * @return bool布尔型
     */
    bool editdistance(string s, string t) {
        // write code here
        //分三种情况讨论,1,当s和t长度相同,说明只有一个位置不同才行,遍历判断即可
        //2,当s比t长一个字符,则依次遍历遇到第一个不同的位置后,s跳过一个位置继续比,后续都相同则成立否则不行
        //3,当s比t短一个字符,依次遍历遇到第一个不同位置后,t跳过一个位置继续比较,同上
        int m=s.size();
        int n=t.size();
        if(abs(m-n)>1)//长度相差二以上则不可能成立
            return false;
        //情况一
        if(m==n)
        {
            int cnt=0;//不等的个数
            for(int i=0; i<m; i++)//遍历记录不相同元素的个数
            {
                if(s[i]!=t[i])
                    cnt++;
            }
            if(cnt!=1)
                return false;
            return true;
        }
        //情况二
        if(m>n)
        {
            int cnt=0;
            for(int i=0; i<n; i++)
            {
                if(s[i]!=t[i])
                    {
                        //删掉s中不同的元素
                        s.erase(i,1);
                        i--;
                        cnt++;
                    }
                if(cnt>1)
                    return false;
            }
            return true;
        }
        //情况三
        if(m<n)
        {
            int cnt=0;
            for(int i=0; i<m; i++)
            {
                if(s[i]!=t[i])
                {
                    //删掉t中不同的元素
                    t.erase(i,1);
                    i--;
                    cnt++;
                }
                if(cnt>1)
                    return false;
            }
            return true;
        }
        return false;
    }
};