题意: 给定两个字符串 s 和 t,判断他们的编辑距离是否为 1。 注意: 满足编辑距离等于 1 有三种可能的情形: 往 s 中插入一个字符得到 t 从 s 中删除一个字符得到 t 在 s 中替换一个字符得到 t 数据范围: 题目没说. 解法: 1.如果两个串的长度差值>=2,那么一定不为1. 2.如果两个串的长度相同,那么只需要判断不同的位置是否只有一个, 3.如果两个串的长度差值为1,假设s串比t串短, 令l[i]为s和t的左边i个串是否相同, 令r[i]为s和t的右边i个串是否相同, O(n)预处理l[]和r[], 然后判断是否存在l[i]=1且r[n-i]=1即可. code: class Solution { public: bool isOneEditDistance(string s, string t) { int n=s.size(),m=t.size(); if(n>m){//n<=m swap(n,m); swap(s,t); } if(m-n>=2)return 0; if(!n)return m==1; // if(n==m){ int cnt=0; for(int i=0;i<n;i++){ if(s[i]!=t[i]){ cnt++; } } return cnt==1; }else{ vector<int>l(n+5,0),r(n+5,0); l[0]=r[0]=1; for(int i=1;i<=n;i++){ l[i]=(l[i-1]&&s[i-1]==t[i-1]); r[i]=(r[i-1]&&s[n-i]==t[m-i]); } for(int i=0;i<=n;i++){ if(l[i]&&r[n-i]){ return 1; } } return 0; } } };